我在JavaScript中嘗試這種reduce
時我沒有得到預期的結果:JavaScript數組減少到子數組長度 - 爲什麼這不起作用?
let x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
x.reduce((a,b) => a.length + b.length, []);
簡單,對不對?這是我期待的事情發生,一步一步:
----------------------------------------------------------------
| callback | a (accumulator) | b (currentValue) | return value |
----------------------------------------------------------------
| 1st run | 0 | 3 | 3 |
----------------------------------------------------------------
| 2nd run | 3 | 3 | 6 |
----------------------------------------------------------------
| 2nd run | 6 | 3 | 9 |
----------------------------------------------------------------
什麼我真正得到? NaN
。在英語中,如果我理解正確,迭代器首先查看我給它的初始值(空數組作爲reduce
的第二個參數),並由參數a
表示。我的代碼顯示了一個簡單的.length
兩個參數被添加。我在哪裏錯了?
輸入是數組,而不是數字,您在圖表中對此進行了描述。 'a'的第一個值是'[]',而不是'0',所以'a.length'可以工作。通過返回一個數字,你會在下一次迭代中提供一個數字,並在其上調用'.length',這顯然不是你的意圖。 – meagar
@meagar Yup,剛剛意識到看着下面的Pointy的代碼。謝謝! –
如果你的意圖是總結數組的長度,你可以很乾淨地'map'和'reduce':'x.map(a => a.length).reduce((a,b)=> a + b )' – meagar