2016-10-22 119 views
0

信息:嗨,你可以看到有4個數組,然後與這些數組裏面的數組。我正在使用_.reduce來合計數組的長度。當我用數組數組調用函數時,我得到了NaN。我期望得到19.結合數組的長度,它爲什麼返回NaN? JavaScript

這是爲什麼?感謝您的幫助

var array1 = [[1],[2],[3],[4],[5]]; 
var array2 = ["a", "b"]; 
var array3 = [{name : "John"}, {age : 21}]; 
var array4 = [1,2,3,4,5,6,7,8,9,0]; 

var array5 = [array4, array3, array2, array1]; 

var arrayComboLength = function(array){ 
return _.reduce(array, function(a,b){ 
    return a.length + b.length; 
}); 
} 


console.log(arrayComboLength(array5)); --> // NaN 

回答

2

reduce的回調的第一個參數是累加器。您正在訪問某個號碼的length,結果爲undefined。然後,您將undefined添加到導致undefined的其餘數組長度的數字中。

var arrayComboLength = function(array) { 
    return _.reduce(array, function(a, b) { 
    return a + b.length; 
    }, 0); 
} 

這是非常接近的計數功能將被遞歸地施加於陣列的所有元素的文檔http://underscorejs.org/#reduce

+0

嗨,非常感謝你的工作。在你的解決方案中,如果我不包含0,我得到這個結果 - > // 1,2,3,4,5,6,7,8,9,0225 不知道爲什麼我會得到那。如果我們忽略起始值(0),那麼我就會受到印象。 –

+0

*更正*如果我們忽略起始值(0),我總是從0開始。這不正確嗎? –

+0

@AugustusBrennan不,它使用第一個數組元素,如果你沒有另外指定,並開始在第二個元素上運行。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – Touffy

0

在給出的例子。例如,遞歸地,它們也將被應用於array4中的標量值。標量值沒有長度。