Ich habe ein Objekt in JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Ich möchte eine for
Schleife verwenden, um ihre Eigenschaften zu erhalten. Und ich möchte es in Teilen wiederholen (nicht alle Objekteigenschaften gleichzeitig).
Mit einem einfachen Array kann ich es mit einer Standardschleife machen for
:
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Aber wie geht das mit Objekten?
Antworten:
Verwenden Sie für die meisten Objekte
for .. in
:Wenn Sie mit ES6 sowohl Schlüssel als auch Werte gleichzeitig benötigen, tun Sie dies
Um zu vermeiden, dass geerbte Eigenschaften protokolliert werden, überprüfen Sie dies mit hasOwnProperty :
Sie müssen
hasOwnProperty
beim Iterieren von Schlüsseln nicht überprüfen, ob Sie ein einfaches Objekt verwenden (zum Beispiel eines, mit dem Sie sich selbst erstellt haben{}
).In dieser MDN-Dokumentation wird allgemeiner erläutert, wie mit Objekten und ihren Eigenschaften umgegangen wird.
Wenn Sie dies "in Blöcken" tun möchten, extrahieren Sie am besten die Schlüssel in einem Array. Da die Bestellung nicht garantiert ist, ist dies der richtige Weg. In modernen Browsern können Sie verwenden
Um kompatibler zu sein, sollten Sie Folgendes tun:
Dann können Sie sich auf Ihre Eigenschaften von Index iterieren:
yourobject[keys[i]]
:quelle
keys
des angegebenen Codes sollte ausreichen.Hier ist eine weitere Iterationslösung für moderne Browser:
Oder ohne Filterfunktion:
Sie müssen jedoch berücksichtigen, dass Eigenschaften im JavaScript-Objekt nicht sortiert sind, dh keine Reihenfolge haben.
quelle
Mit
Object.entries
dir machst du so etwas.Die Object.entries () -Methode gibt ein Array der eigenen aufzählbaren Eigenschaft eines bestimmten Objekts zurück [Schlüssel, Wert]
Sie können also über das Objekt iterieren
key
undvalue
für jedes Objekt haben und so etwas erhalten.oder so
Eine Referenz finden Sie in den MDN-Dokumenten für Objekteinträge
quelle
Mit den neuen ES6 / ES2015-Funktionen müssen Sie kein Objekt mehr verwenden, um über einen Hash zu iterieren. Sie können eine verwenden Karte verwenden . Javascript Maps halten die Schlüssel in der Einfügereihenfolge, was bedeutet, dass Sie sie durchlaufen können, ohne die hasOwnProperty überprüfen zu müssen, was immer wirklich ein Hack war.
Über eine Karte iterieren:
oder verwenden Sie für jedes:
quelle
Wenn Sie den Schlüssel und den Wert beim Iterieren möchten , können Sie eine for ... of- Schleife mit Object.entries verwenden .
quelle
Der einzig zuverlässige Weg, dies zu tun, besteht darin, Ihre Objektdaten in zwei Arrays zu speichern, einem der Schlüssel und einem für die Daten:
Sie können dann wie gewohnt über die Arrays iterieren:
Ich benutze nicht
Object.keys(obj)
, weil das IE 9+ ist.quelle
-> wenn wir ein JavaScript-Objekt mit dem Schlüssel eines Array von Objekten durchlaufen und finden
quelle
Wenn Sie das gesamte Objekt auf einmal iterieren möchten, können Sie die
for in
Schleife verwenden:Aber wenn Sie das Objekt tatsächlich in Teile teilen möchten, können Sie dies nicht. Es gibt keine Garantie dafür, dass die Eigenschaften des Objekts in einer bestimmten Reihenfolge vorliegen. Daher kann ich mir zwei Lösungen vorstellen.
Zunächst müssen bereits gelesene Eigenschaften "entfernt" werden:
Eine andere Lösung, die ich mir vorstellen kann, ist die Verwendung von Array of Arrays anstelle des Objekts:
Dann
for
funktioniert die Standardschleife .quelle
Ich habe mir endlich eine praktische Utility-Funktion mit einer einheitlichen Oberfläche ausgedacht, um Objekte, Strings, Arrays, TypedArrays, Maps, Sets (beliebige Iterables) zu iterieren.
https://github.com/alrik/iterate-javascript
quelle
Sie können versuchen, lodash zu verwenden. Eine moderne JavaScript-Dienstprogrammbibliothek, die Modularität, Leistung und Extras bietet, um Objekte schnell zu iterieren: -
quelle
Für die Objektiteration verwenden wir normalerweise eine
for..in
Schleife. Diese Struktur durchläuft alle aufzählbaren Eigenschaften, einschließlich derjenigen, die über die prototypische Vererbung geerbt werden. Zum Beispiel:Allerdings
for..in
wird Schleife über alle zählbare Elemente , und dies wird nicht in der Lage uns die Iteration in Stücke zu teilen. Um dies zu erreichen, können wir die eingebauteObject.keys()
Funktion verwenden, um alle Schlüssel eines Objekts in einem Array abzurufen. Wir können dann die Iteration in mehrere for-Schleifen aufteilen und über das Schlüsselarray auf die Eigenschaften zugreifen. Zum Beispiel:quelle
quelle
Object
s in Ordnung sind. Sie sind nicht.If you can make sense of the sentence it worked
funktioniert nur aufgrund von Implementierungsdetails. Es ist nicht garantiert, dass es überhaupt funktioniert. Außerdem sollten Sie Ihre Funktionen und Variablen nicht mit TitleCase versehen. Das ist fürclass
es.Wirklich eine PITA, dies ist nicht Teil von Standard-Javascript.
Hinweis: Ich habe die Rückrufparameter auf (Wert, Schlüssel) umgestellt und ein drittes Objekt hinzugefügt, um die API mit anderen APIs konsistent zu machen.
Verwenden Sie es so
quelle
this
für den Rückruf festlegen , was Sie möchten, da der Rückruf einen eigenen Kontext hat.objectForEach
Funktion. Entschuldigung, wenn das verwirrend war.Ja. Sie können ein Objekt mit der for-Schleife durchlaufen. Hier ist ein Beispiel
HINWEIS: Das oben erwähnte Beispiel funktioniert nur in IE9 +. Siehe Objec.keys Browserunterstützung hier .
quelle
Versuchen Sie es online
quelle