Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较回文_Javascript_Arrays_Palindrome - Fatal编程技术网

Javascript 如何比较回文

Javascript 如何比较回文,javascript,arrays,palindrome,Javascript,Arrays,Palindrome,不知道我做错了什么。我试图比较两个字符串,看看它们是否是回文 function palindrome(str) { var rem = str.replace(/\s/g, ""); var a = rem.split(""); var b = a.reverse(); for(var i = 0; i < rem.length; i++){ if (b[i] == a[i]){ return true; } return fals

不知道我做错了什么。我试图比较两个字符串,看看它们是否是回文

function palindrome(str) {
  var rem = str.replace(/\s/g, "");
  var a = rem.split("");
  var b = a.reverse();

  for(var i = 0; i < rem.length; i++){
    if (b[i] == a[i]){
      return true;
    }
      return false;
  }
}

palindrome("not a doctor"); //this should show false, but it's showing true
函数回文(str){
var rem=str.replace(/\s/g,“”);
var a=相对物分割(“”);
变量b=a.反向();
对于(变量i=0;i
反向方法将调用数组对象的元素转置到位,改变数组,并返回对数组的引用

这就是为什么您会得到
true
。似乎您的
a
b
变量指向同一个对象

顺便说一句,正如其他人所指出的,你的方法似乎有点缺陷。因此,您的任务的更好版本的解决方案可以是(未经过适当测试):

函数isAlindrome(输入){
var str=input.replace(/\s/g,“”).toLowerCase();
var left=0,right=str.length-1;

而(左代码有两个问题

正如@curveball所指出的,a和b变量是对相同对象的引用,因为反向修改原始数组

此外,只要a数组中的第一个元素与b数组中的第一个元素相等,就返回true。只要一个元素与另一个元素不同,就必须返回false。但只有在比较数组中的所有元素后,才能返回true

函数回文(str){
var rem=str.replace(/\s/g,“”);
var a=相对物分割(“”);
var b=a.slice().reverse();
对于(变量i=0;i回文(“不是医生”);
正如其他人所说,您的
a
b
指向同一个对象,因此您需要首先克隆它

另外,您不能立即返回
true
,更好的方法是检查不平等性,并在整个周期结束后返回
true

function palindrome(str) {
  var rem = str.replace(/\s/g, "");
  var a = rem.split("");
  var b = a.slice().reverse();
  console.log(a, b);

  for(var i = 0; i < rem.length; i++){
    if (b[i] != a[i]){
      return false;
    }
  }

  return true;
}

console.log(palindrome("lol 1"));
函数回文(str){
var rem=str.replace(/\s/g,“”);
var a=相对物分割(“”);
var b=a.slice().reverse();
控制台日志(a,b);
对于(变量i=0;i
您的代码有一些问题

问题1:您正在使用
reverse
方法对原始数组进行变异(请参阅上的文档)。因此变量a和b将具有相同的值,即原始数组的反向字符串。相反,您可以创建一个新数组,并将其分配给变量
b
,如下所示:

var b = [].concat(a).reverse();
问题2:您忘记检查字符串中的所有字母。您返回函数的时间太早了。例如,对于不是回文的输入字符串“aada”,它将返回true。这是因为,一旦计算两个数组的第一个字符串的相似性,您的函数就会退出。要解决此问题,您可以执行以下操作例如:

函数回文(str){
var rem=str.replace(/\s/g,“”);
var a=相对物分割(“”);
var b=[].concat(a).reverse();
对于(变量i=0;i
注意:
.slice()
可用于反转数组的副本–
var b=a.slice().reverse();