Verwenden von Objekten in For Of Loops
Warum ist das nicht möglich, verwenden Sie Objekte in für Schleifen? Oder ist das ein browser-bug? Dieser code funktioniert nicht in Chrome 42, nämlich undefined ist nicht eine Funktion:
test = { first: "one"}
for(var item of test) {
console.log(item)
}
InformationsquelleAutor der Frage Daniel Herr | 2015-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den for..of-Schleife unterstützt nur wiederholenden Objekte wie arrays, Objekte.
Zur Iteration über die Werte eines Objekts verwenden:
InformationsquelleAutor der Antwort Overv
Wenn Sie die Speicherung von Daten in einem key-value-store, bitte verwenden Sie
Map
die explizit für diesen Zweck konzipiert.Wenn Sie haben, ein Objekt zu verwenden, obwohl, ES2017 (ES8) ermöglicht die Verwendung
- Objekt.Werte
:Wenn das jedoch nicht unterstützt, verwenden Sie ein polyfill: Alternative version für
- Objekt.Werte()
Und schließlich, wenn Sie die Unterstützung einer älteren Umgebung, die nicht unterstützen diese syntax, Sie zu greifen, zu verwenden
forEach
undObject.keys
:InformationsquelleAutor der Antwort Qantas 94 Heavy
Können Sie diese syntax verwenden:
Jedoch
- Objekt.Einträge
hat den Armen jetzt unterstützenfunktioniert nicht in IE oder iOS-Safari. Sie werden wahrscheinlich brauchen einen polyfill.InformationsquelleAutor der Antwort mpen
Ich Objekte gemacht iterierbar mit diesem code:
Verwendung:
InformationsquelleAutor der Antwort Daniel Herr
Aber wenn wir das tun
Bekommen wir Fehler, weil für.. - Schleife funktioniert nur auf Iterablesdas heißt, das Objekt hat einen @@iteratorder sich auf Iterator-Protokolldas heißt, es muss ein Objekt mit einer nächsten Methode. Die nächste Methode übernimmt keine Argumente und es sollte ein Objekt zurückgeben, mit diesen beiden Eigenschaften.
getan: signalisiert, dass die Sequenz beendet ist, wenn wahr ist, und false bedeutet, dass es kann mehr Werte
Wert: dies ist das aktuelle Element in der Sequenz
Also, um ein Objekt Iterierbar , ist es, die Arbeit mit für.. wir können:
1 .Ein Objekt einer Iterierbar durch die Zuordnung zu den mystischen @@iterator Eigenschaft durch die Symbol.iterator Eigenschaft.Hier ist, wie:
2.Verwenden Objekt.Einträgedas gibt ein Iterierbar:
3.Verwenden Objekt.Schlüsselhier ist, wie:
Hoffe, das hilft!!!!!!
InformationsquelleAutor der Antwort Manishz90
Weil die Objekt-literal nicht die Symbol.iterator Eigenschaft. Um genau zu sein, können Sie nur Durchlaufen ZeichenfolgeArrayAnzeigenSetArgumenteNodeList(nicht weit verbreitet-Unterstützung) und Generator mit für... Schleife.
Umgang mit Objekt-Literal iteration, haben Sie zwei Möglichkeiten.
für...
Objekt.Tasten + forEach -
InformationsquelleAutor der Antwort Lewis
Die Antwort ist Nein. Es ist nicht möglich, Für die..mit Objekt-Literale.
Ich Stimme mit Overv, Für..Der ist nur für iterables.
Ich hatte genau die gleiche Frage, weil ich Objekte zu iterieren über die Schlüssel und Werte mit for..in -. Aber ich erkannte, dass das ist, was ES6 KARTEN und SETZT sind.
Damit erreicht er das Ziel nicht mit for..In (Validierung mit hasOwnProperty) und nicht-Objekt verwenden.- Tasten().
Zusätzlich, Ihre Schlüssel sind nicht beschränkt auf strings. Sie können zahlen, Objekte oder andere Literale.
InformationsquelleAutor der Antwort cuadraman
Objekt-Literale haben keine built-in-Iteratoren, die erforderlich sind, um die Arbeit mit
for...of
Schleifen. Allerdings, wenn Sie nicht wollen, zu gehen durch die Mühe der Zugabe von Ihren eigenen[Symbol.iterator]
zu Ihrem Objekt, können Sie einfach dieObject.keys()
Methode. Diese Methode gibt einArray
Objekt, das bereits einen eingebauten iterator verwenden, so können Sie es mit einemfor...of
- Schleife wie diese:InformationsquelleAutor der Antwort TheDarkIn1978
Ist es möglich zu definieren, der einen iterator über alle zu geben-Objekt, auf diese Weise können Sie verschiedene Logik für jedes Objekt
Dann einfach direkt Durchlaufen
x
Ist es möglich, das gleiche zu tun, auf die
Object.prototype
Objekt Und einen Allgemeinen iterator für alle Objekteiteriere Ihr Objekt wie dieses
Oder diese Weise
InformationsquelleAutor der Antwort Yaki Klein
Ich habe gerade die folgende, leicht Konsole aus meinen Sachen.
InformationsquelleAutor der Antwort DaFrenzy
Was über die Verwendung von
InformationsquelleAutor der Antwort user1703761
in ES6 könnten Sie gehen mit generator:
Hier ist das jsfiddle.
In der Ausgabe erhalten Sie ein Objekt mit der
"value"
und"done"
Tasten."Value"
enthält alles, was Sie wollen es zu haben und"done"
ist der aktuelle Stand der iteration in bool.InformationsquelleAutor der Antwort Serge Nikolaev
Wie über die Verwendung Objekt.Schlüssel um ein array von keys? Und dann forEach auf Array?
obj = { a: 1, b:2}
Object.keys(obj).forEach( key => console.log(`${key} => ${obj[key]}`))
InformationsquelleAutor der Antwort justingordon