這不起作用的原因似乎是因爲forEach
未迭代使用類似數組構造函數時設置的undefined
值。
forEach
工作得很好,其實有內容,你會看到,當你像這樣運行代碼數組:
[1,2,3,4,5,6,7,8].forEach(function(){console.log(arguments)});
所以,現在,你會尋找將正確初始化新數組,包含內容。
This question on SO在這方面有一些有用的答案。
最短的解決方案似乎是:
new Array(5+1).join('0').split('')
你可以簡單的鏈條後的forEach
。
或者,你可以在這個問題更upvoted答案之一掀起原型:
Array.prototype.init = function(value, length){
return Array.apply(null, new Array(length)).map(function(){
return value.valueOf();
},value);
}
這允許你做這樣的事情:
[].init('foo', 3);
// ["foo", "foo", "foo"]
[].init(60, 4);
// [60, 60, 60, 60]
[].init({}, 3);
// [{},{},{}]
[].init(true, 9);
// [true, true, true, true, true, true, true, true, true]
當然你也可以在init()
之後連鎖.forEach()
。
(實際上,如果您不將此函數添加到Array.prototype
,則可以使用init()
,而不使用數組文字。這可能是一種「更清潔」的解決方案)
可能的重複[對於數組中的每一個。如何在JavaScript中做到這一點?](http://stackoverflow.com/questions/9329446/for-each-in-an-array-how-to-do-that-in-javascript) – GSerg
爲什麼組成一個數組只是遍歷一系列數字?爲什麼不只是做一個幫助函數來進行迭代(如我的答案)?我想我很困惑,爲什麼你認爲製作一個虛擬數組,以便可以迭代一系列數字就是期望的解決方案? – jfriend00
你是對的,我正在創建一個虛擬數組,因爲'forEach'。它看起來像你的答案是最適合我的。 –