2013-04-06 54 views
5

我有一個像這樣的forEach不工作時循環帶有對象的數組確實

var updates = []; 

我再添加東西到數組這樣

updates["func1"] = function() { x += 5 }; 

當我打電話與功能的陣列一個for循環它按預期工作

for(var update in updates) { 
    updates[update](); 
} 

但是,當我使用forEach它不工作!

updates.forEach(function (update) { 

    update(); 
}); 

的forEach肯定工作在我的瀏覽器是谷歌Chrome,我究竟做錯了什麼?

回答

9

forEach迭代indexes不超過properties。您的代碼:

updates["func1"] = "something"; 

添加一個屬性的對象 - 即順便是一個數組 - 不數組中的元素。 事實上,它等同於:

updates.func1 = "something"; 

如果你需要的東西像一個HashMap,那麼你可以改用普通的對象:

updates = {}; 

updates["func1"] = "something"; 

然後重複使用for…in,即shouldn't be used on arrays

或者您可以使用Object.keys來檢索迭代它們的屬性:

Object.keys(updates).forEach(function(key) { 
    console.log(key); 
}); 
+0

謝謝你,這幫助我更好地理解它,我讀過,我不應該使用'for ... in'這就是爲什麼我問這個問題,所以謝謝替代'for ... in' :) – GriffLab 2013-04-06 02:22:27

5

您並未將項目添加到數組中,而是將對象屬性添加到數組對象。 for .. in將返回所有屬性,forEach僅迭代數組元素。如果你打算在你的方式添加

updates.push(function() { x += 5 }); 

,然後只需使用一個對象,而不是一個數組:

要添加到陣列中,你可以這樣做

var updates = {} 

然後使用for ... in