Einführung
In diesem Lab werden wir das Konzept eines Generator-Funktionen erkunden, die mithilfe von Rekursion alle Schlüssel eines gegebenen Objekts durchläuft. Das Ziel dieses Labs ist es, den Lernenden einen praxisnahen Einblick zu geben, wie man yield- und yield*-Ausdrücke in Kombination mit for...of-Schleifen und Object.keys() verwendet, um über die Schlüssel und Werte eines Objekts zu iterieren. Am Ende dieses Labs werden die Lernenden eine praktische Vorstellung davon haben, wie man rekursiv durch ein Objekt geht und ein Array von Schlüsseln erzeugt, die den aktuellen Pfad und die entsprechenden Werte repräsentieren.
Code zum Iterieren über die Schlüssel eines Objekts
Um eine Liste aller Schlüssel eines gegebenen Objekts zu generieren, verwenden Sie die folgenden Schritte:
Öffnen Sie das Terminal/SSH und geben Sie
nodeein, um mit der Codeausführung zu beginnen.Definieren Sie eine Generator-Funktion namens
walk, die ein Objekt und ein Array von Schlüsseln akzeptiert. Verwenden Sie Rekursion, um alle Schlüssel des Objekts zu iterieren.Innerhalb der
walk-Funktion verwenden Sie einefor...of-Schleife undObject.keys(), um über die Schlüssel des Objekts zu iterieren.Verwenden Sie
typeof, um zu überprüfen, ob jeder Wert im gegebenen Objekt selbst ein Objekt ist. Wenn der Wert ein Objekt ist, verwenden Sie denyield*-Ausdruck, um rekursiv an die gleiche Generator-Funktion,walk, zu delegieren und den aktuellenkeyan das Array von Schlüsseln anzuhängen.Andernfalls
yieldein Array von Schlüsseln, das den aktuellen Pfad und den Wert des gegebenenkeyrepräsentiert.Verwenden Sie den
yield*-Ausdruck, um an diewalk-Generator-Funktion zu delegieren.
Hier ist der Code:
const walkThrough = function* (obj) {
const walk = function* (x, previous = []) {
for (let key of Object.keys(x)) {
if (typeof x[key] === "object") yield* walk(x[key], [...previous, key]);
else yield [[...previous, key], x[key]];
}
};
yield* walk(obj);
};
Um den Code zu testen, erstellen Sie ein Objekt und verwenden Sie die walkThrough-Funktion, um eine Liste aller seiner Schlüssel zu generieren:
const obj = {
a: 10,
b: 20,
c: {
d: 10,
e: 20,
f: [30, 40]
},
g: [
{
h: 10,
i: 20
},
{
j: 30
},
40
]
};
[...walkThrough(obj)];
/*
[
[['a'], 10],
[['b'], 20],
[['c', 'd'], 10],
[['c', 'e'], 20],
[['c', 'f', '0'], 30],
[['c', 'f', '1'], 40],
[['g', '0', 'h'], 10],
[['g', '0', 'i'], 20],
[['g', '1', 'j'], 30],
[['g', '2'], 40]
]
*/
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab "Walk Through Object" abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.