2016-05-02 7 views
0

Ich versuche, über ein Objekt mit der forEach-Array-Methode zu iterieren.Warum kann ich nicht über Object mit jedem iterieren

var obj = {"a":1, "b":2, "c":3}; 
[].forEach.call(obj, function(n, key) { 
    console.log(key, n) 
}) 

drucken sollte

a: 1

b: 2

c: 3

Das funktioniert nicht, wie es auch im Debugger undefined zurückgibt, wenn ich künstlich Fügen Sie dem Obj

obj.length = 3; 
eine Längeneigenschaft hinzu 0

Wie mache ich dieses Objekt Array wie ich kann Array-Methode wie foreach auf das Objekt aufrufen. Ich bin mir bewusst, dass es andere Möglichkeiten gibt, über ein Objekt zu iterieren. Ich habe mich nur gefragt, was ich in diesem Szenario falsch gemacht habe.

+0

Weil 'Array.forEach' für Arrays gemeint ist, oder zumindest auf iterable Array artige Objekte mit einer Länge aufgerufen werden. Verwenden Sie stattdessen eine For-In-Schleife. – adeneo

+1

'Object.keys (obj) .forEach (Funktion (Schlüssel) {console.log (Schlüssel, obj [Schlüssel]);}); ' –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in – j08691

Antwort

1

Array.prototype.forEach() funktioniert nur für Arrays und nicht für Objekte. Sie könnten Object.keys() Schleife über die eigene enumerable Eigenschaften des Objekts verwenden:

var obj = {"a":1, "b":2, "c":3}; 

Object.keys(obj).forEach(function(key) { 
    console.log(key, obj[key]); 
}); 
Verwandte Themen