我在代码中引入了console.log,以确保我的代码看到的数组和数组元素是
function testArrayEquality(array1, array2) {
for (var i = 0; i < array1.length; i++) {
if (typeof array1[i] === "object" && typeof array2[i] ===
"object") {
console.log(array1[i], array2[i]);
testArrayEquality(array1[i], array2[i]);
} else {
if (array1[i] !== array2[i]) {
console.log(array1[1], array2[i]);
return false;
}
}
}
return true;
}
var array1 = [
[3, 4],
[4, 5]
];
var array2 = [
[3, 4],
[4, 6]
];
testArrayEquality(array1, array2);
答案 0 :(得分:1)
我认为发生的事情是,您只使用数组测试此函数,这在最顶层是类似的。如果其中一个嵌套数组中存在错误,它将在递归循环中返回false,但是&#34;忘记&#34;这是假的,因为你没有对递归函数调用的返回做任何事情。你需要做的是:
function testArrayEquality(array1,array2) {
for(var i = 0; i < array1.length; i++){
if(typeof array1[i] === "object" && typeof array2[i] ===
"object") {
console.log(array1[i], array2[i]);
recursive = testArrayEquality(array1[i],array2[i]);
if (recursive === false) {
return false;
}
}
else {
if(array1[i] !== array2[i]) {
console.log(array1[1],array2[i]);
return false;
}
}
}
return true;
}
var array1 = [[3,4],[4,5]];
var array2 = [[3,4],[4,6]];
testArrayEquality(array1,array2);
这样,如果必须在较低级别上使用不同的数组,则会将错误传递给原始函数调用