Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 131

for/of mit Objekten

Оглавление

Objekte sind (standardmäßig) nicht iterierbar. Der Versuch, for/of auf ein reguläres Objekt anzuwenden, löst zur Laufzeit einen TypeError aus:

let o = { x: 1, y: 2, z: 3 };

for(let element of o) { // Löst einen TypeError aus, da o nicht iterierbar ist.

console.log(element);

}

Wenn Sie über die Eigenschaften eines Objekts iterieren wollen, können Sie eine for/in-Schleife (eingeführt in 5.4.5) oder for/of mit der Methode Object.keys() verwenden:

let o = { x: 1, y: 2, z: 3 };

let keys = "";

for(let k of Object.keys(o)) {

keys += k;

}

keys // => "xyz"

Das funktioniert, weil Object.keys() ein Array der Eigenschaftsnamen eines Objekts zurückgibt und Arrays mit for/of iterierbar sind. Die Iteration über die Schlüssel eines Objekts erfolgt übrigens nicht live, anders als in dem früheren Beispiel, in dem wir ein Array von Zahlen durchlaufen haben: Änderungen am Objekt o, die im Schleifenkörper vorgenommen werden, wirken sich nicht auf die Iteration aus. Wenn Sie sich nicht für die Schlüssel eines Objekts interessieren, können Sie stattdessen auch über die entsprechenden Werte iterieren:

let sum = 0;

for(let v of Object.values(o)) {

sum += v;

}

sum // => 6

Und wenn Sie sowohl an den Schlüsseln als auch an den Werten der Eigenschaften eines Objekts interessiert sind, können Sie for/of mit Object.entries() und einer destrukturierenden Zuweisung verwenden:

let pairs = "";

for(let [k, v] of Object.entries(o)) {

pairs += k + v;

}

pairs // => "x1y2z3"

Object.entries() gibt ein verschachteltes Array zurück, wobei jedes innere Array ein Schlüssel/Wert-Paar einer Eigenschaft des Objekts darstellt. In diesem Codebeispiel verwenden wir eine destrukturierende Zuweisung, um die inneren Arrays in zwei einzelne Variablen zu entpacken.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх