簡體   English   中英

為什么此函數永遠不會從else部分返回false

[英]Why does this function never return false from the else part

我將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); 

我認為正在發生的事情是,您僅用最頂層的數組測試了此功能。 如果其中一個嵌套數組有錯誤,它將在遞歸循環中返回false,但“忘記”該false,因為您對遞歸函數調用的返回不做任何事情。 您需要做的是:

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

這樣,如果您必須在較低級別上使用不同的數組,則將錯誤get傳遞給原始函數調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM