比较两个数组并且不能让它返回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));
答
你是不是等待所有的比较在返回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));
答
返回将停止你的循环和退出功能。因此,因为在上面的代码中,两个数组的第一个元素是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));
它永远不会返回false,因为它总是返回一个字符串值。而且,在比较两个数组中的第一个项目后,您总是返回。 –
我看到的一个问题是else语句。你现在说的是,如果每个数组中的当前元素与另一个数组中的当前元素相同,则数组相同。这只会执行一次迭代,因为您立即返回一个值。如果两个元素不相同,您只需要返回false。如果函数使其到达for循环的结尾,则知道所有元素都是相同的,因此返回true。 – Jacob
建立在@WillP上。说,你应该看看JavaScript认为[truthy]是什么(https://developer.mozilla.org/en-US/docs/Glossary/Truthy),因为它并不总是100%直观。 – aug