2016-01-07 102 views
0
function every(array, predictate){ 
    array.forEach(function(x){ 
    if (!predictate(x)) 
     { 
     return false; 
     } 
    }); 
    return true; 
} 


console.log(every([NaN, NaN, NaN], isNaN)); 
//true 
console.log(every([NaN, NaN, 4], isNaN)); 
//suppose to return false, but still return true... 

第二個console.log應該返回false,但它返回true。我做錯了什麼?爲什麼這段代碼不會返回false?

回答

2

return falseforEach中使用的匿名函數的返回值。所以它不會爲every返回任何內容。如果你想使用forEach並返回false,你必須這樣做:

function every(array, predictate) { 
    var result = true; 

    array.forEach(function(x) { 
     if (!predictate(x)) { 
      result = false; 
     } 
    }); 

    return result; 
} 
+0

我覺得我幾乎得到它:除非你將其更改爲類似

every將始終返回true。你認爲你可以多澄清一點嗎? 「返回false是forEach中使用的匿名函數的返回。」 你指的是函數(x)?爲什麼它不能返回false? 對不起,如果我沒有任何意義。 – Sotra

+1

是的,我指的是'function(x)'。這個函數可以返回false,這就是你正在做的。但是'every'不會因爲匿名函數返回false而返回false。 – Magus

+0

哦,我明白你的意思......因爲我打電話給每一個不是匿名函數,這就是爲什麼我想每個人都返回false而不是匿名函數。 我一直在這一段時間。我終於明白了。謝謝。 – Sotra

1

return false聲明是針對forEach回調函數,而不是外部every

function every(array, predictate){ 
    var retValue = true; 
    array.forEach(function(x){ 
    if (!predictate(x)) 
     { 
     retValue = false; 
     } 
    }); 
    return retValue; 
}