为什么这个函数永远不会从else部分返回false

时间:2017-10-23 13:37:03

标签: javascript

我在代码中引入了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);

1 个答案:

答案 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);

这样,如果必须在较低级别上使用不同的数组,则会将错误传递给原始函数调用