2017-05-28 47 views
2

雖然試圖建立X長度的索引對象,我意識到下面的代碼是行不通的,但我不能明白爲什麼它沒有:爲什麼減少初始化的X長度數組不起作用?

Array(X).reduce((acc, curr, index) => { 
    console.log(acc, curr, index); 
    return acc; 
}, {}); 
// => Object {} 

console.log應該爲每個打印值迭代(X次),但它看起來像它從未被調用過,結果值就是我們作爲參數傳遞給reduce方法的initialValue

有沒有人可以解釋爲什麼reducer不叫?

回答

2

它沒有被調用,因爲你的數組實際上是空的。

如果傳遞給Array構造唯一的參數是0和232-1(含)之間的整數 ,這將返回一個新的JavaScript陣列 設置到該號碼(注意其長度屬性:這意味着一個 陣列arrayLength空槽,不符合實際未定義 值

插槽,可以這樣做:

Array(X).fill().reduce(...) 

請參閱Array.fill doc

+0

所以**不是帶有實際未定義值的插槽**是這裏的重要部分。事實上,Array(X).fill()。reduce(...)'用'undefined'值填充數組,然後調用reducer X次。謝謝! – ClementParis016