比较两个数组并且不能让它返回true

问题描述:

我的目标是比较两个数组。我不能让它返回false,它只是比较第一个值和返回值。在确定真或假之前,我是否不正确地遍历所有值?比较两个数组并且不能让它返回true

var array1 =[1,2,3]; 
var array2=[1,2,4]; 

var areArraysSame = function(array1, array2) { 
    if(array1.length !== array2.length) { 
     return "These are not the same length"; 
    } 
    for(var i = 0; i <= array1.length; i++) { 
     if(array1[i] !== array2[i]) { 
     return "These are not the same array"; 

     }else{ 
     return "these are the same array"; 
     } 
    } 
    }; 
    console.log(areArraysSame(array1, array2)); 
+3

它永远不会返回false,因为它总是返回一个字符串值。而且,在比较两个数组中的第一个项目后,您总是返回。 –

+0

我看到的一个问题是else语句。你现在说的是,如果每个数组中的当前元素与另一个数组中的当前元素相同,则数组相同。这只会执行一次迭代,因为您立即返回一个值。如果两个元素不相同,您只需要返回false。如果函数使其到达for循环的结尾,则知道所有元素都是相同的,因此返回true。 – Jacob

+0

建立在@WillP上。说,你应该看看JavaScript认为[truthy]是什么(https://developer.mozilla.org/en-US/docs/Glossary/Truthy),因为它并不总是100%直观。 – aug

你是不是等待所有的比较在返回true之前进行(或者你真正的字符串

你应该这样做:

for(var i = 0; i <= array1.length; i++) { 
    if(array1[i] !== array2[i]) { 
     return false; 
    } 
} 
return true; 

等待循环结束返回前true

您在检查后立即返回Ë第一个值,去掉else块在for循环,使得它所有的值进行比较,如下图所示:

var array1 =[1,2,3]; 
var array2=[1,2,4]; 

var areArraysSame = function(array1, array2) { 
if(array1.length !== array2.length) { 
    return "These are not the same length"; 
} 
for(var i = 0; i <= array1.length; i++) { 
    if(array1[i] !== array2[i]) { 
    return "These are not the same array"; 
    } 
} 
return "These are the same array"; 
}; 
console.log(areArraysSame(array1, array2)); 
+0

我正在更新相同:) @Keiwan – superUser

+0

感谢这个工程 - 我现在明白我需要把真正的回报放在循环之外。 – EKR

+0

@suzo是的,我看到你的编辑,这就是为什么我再次删除我的评论:) – Keiwan

返回将停止你的循环和退出功能。因此,因为在上面的代码中,两个数组的第一个元素是1,所以代码在循环的第一次迭代中返回。如果要返回循环后数组是否匹配返回,并使用布尔变量来跟踪数组是否匹配。只在循环中以虚假陈述返回。

您在for循环的第一次迭代中有return语句;在比较每个数组中的第一个项目后,循环将会结束,无论它是真还是假。

你可以存储一个条件,并根据你的回报。

var array1 = [1, 2, 3]; 
    var array2 = [1, 2, 4]; 

    var areArraysSame = function (array1, array2) { 
     var isSame = true; 

     if (array1.length !== array2.length) { 
      return "These are not the same length"; 
     } 

     for (var i = 0; i <= array1.length; i++) { 
      if (array1[i] !== array2[i]) { 
       isSame = false; 
      } 
     } 
     return isSame ? "These are the same array" : "These are not the same array"; 
    }; 

    console.log(areArraysSame(array1, array2));