2013-04-06 25 views
5

Ben hiçbir zaman bu işlevleri çağırmak zaman zaman buforEach döngü için nesnelerin bir dizi yaptığında

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

gibi diziye şeyler eklemek böylece

var updates = []; 

gibi bir dizi var çalışmıyor bir döngü için beklenen

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

olarak çalışıyor Ama forEach kullandığınızda çalışmıyor !?

updates.forEach(function (update) { 

    update(); 
}); 

forEach kesinlikle yanlış ne yapıyorum, google chrome benim tarayıcıda çalışıyor?

cevap

9

forEach, indexes üzerinden properties üzerinden yinelenir. Kodunuz:

updates["func1"] = "something"; 

bir nesneye özellik ekler - değil bir diziye bir öğe - tesadüfen bir dizi olduğunu. Bir HashMap gibi bir şey gerekiyorsa

updates.func1 = "something"; 

, o zaman bunun yerine düz nesneyi kullanabilirsiniz: hiç Aslında , bu eşdeğer

updates = {}; 

updates["func1"] = "something"; 

Sonra for…in kullanarak yineleme, shouldn't be used on arrays

o

Veya özellikleri bir yineleme üzerinden almak için Object.keys özelliklerini kullanabilirsiniz:

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

Teşekkür ederim, bu bana daha iyi anladığım için teşekkür ederim, okuduğum için kullanmamalıyım, çünkü bu soruyu sordum, bu yüzden "in" in alternatifi için teşekkürler ... :) – GriffLab

5

Diziye öğeler eklemiyorsunuz, dizi nesnesine nesne özellikleri ekliyorsunuz. for .. in, tüm özellikleri döndürür, forEach yalnızca yineleme dizisi öğeleri üzerinde.

diziye eklemek için, bu yapardın:

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

Eğer sen bir şekilde eklemek istiyorsanız, o zaman sadece bir nesne değil, bir dizi kullanın:

var updates = {} 

ve sonra for ... in kullanın.