Das Durchlaufen von Objekten ist eine häufige Aufgabe in JavaScript, aber wenn Sie für jede Situation die richtige Technik kennen, können Sie Ihren Code sauberer und effizienter machen. Dieser Artikel erklärt, warum Sie for...of nicht direkt mit Objekten verwenden können, bietet alternative Ansätze und stellt Best Practices für die Iteration über Objekte bereit.
In JavaScript ist die Iteration über Datenstrukturen ein wesentlicher Bestandteil der Verarbeitung komplexer Datensätze. Während Arrays und Strings iterierbare Objekte sind, erfordern einfache Objekte (Schlüssel-Wert-Paare) unterschiedliche Methoden zur Iteration. Wenn Entwickler versuchen, for...of für Objekte zu verwenden, stoßen sie häufig auf Probleme.
Die for...of-Schleife wird verwendet, um über iterierbare Objekte wie Arrays, Strings, Maps und Sets zu iterieren. Einfache JavaScript-Objekte sind jedoch standardmäßig nicht iterierbar.
const user = { name: 'John', age: 30 }; for (const value of user) { console.log(value); } // TypeError: user is not iterable
Der Versuch, for...of für ein einfaches Objekt zu verwenden, löst einen TypeError aus. Dies liegt daran, dass Objekte in JavaScript keine [Symbol.iterator]-Methode haben, die für die for...of-Schleife erforderlich ist.
Um über Objekte in JavaScript zu iterieren, stehen mehrere Techniken zur Verfügung:
Die for...in-Schleife durchläuft die aufzählbaren Eigenschaften eines Objekts. Es durchläuft die Schlüssel des Objekts.
const user = { name: 'John', age: 30 }; for (const key in user) { console.log(key, user[key]); } // Output: // name John // age 30
Object.keys() gibt ein Array der eigenen Eigenschaftsschlüssel des Objekts zurück, so dass Sie mit for...of darüber iterieren können.
const user = { name: 'John', age: 30 }; for (const key of Object.keys(user)) { console.log(key, user[key]); } // Output: // name John // age 30
Object.values() gibt ein Array der Eigenschaftswerte des Objekts zurück, das dann mit for...of.
iteriert werden kann
const user = { name: 'John', age: 30 }; for (const value of Object.values(user)) { console.log(value); } // Output: // John // 30
Object.entries() gibt ein Array der Schlüssel-Wert-Paare des Objekts zurück, was es perfekt für die Iteration über Schlüssel und Werte macht.
const user = { name: 'John', age: 30 }; for (const [key, value] of Object.entries(user)) { console.log(key, value); } // Output: // name John // age 30
Technique | Access to Keys | Access to Values | Inherited Properties | Simplicity |
---|---|---|---|---|
for...in | Yes | Yes | Yes (if enumerable) | Simple |
Object.keys() for...of | Yes | No | No | Moderate |
Object.values() for...of | No | Yes | No | Moderate |
Object.entries() for...of | Yes | Yes | No | Slightly complex |
The for...in loop is used to iterate over the enumerable properties (keys) of an object, including properties that may be inherited through the prototype chain.
const user = { name: 'John', age: 30 }; for (const key in user) { console.log(key, user[key]); } // Output: // name John // age 30
const colors = ['red', 'green', 'blue']; for (const index in colors) { console.log(index, colors[index]); } // Output: // 0 red // 1 green // 2 blue
The for...of loop is used to iterate over iterable objects like arrays, strings, maps, sets, and other iterables. It loops over the values of the iterable.
const colors = ['red', 'green', 'blue']; for (const color of colors) { console.log(color); } // Output: // red // green // blue
const name = 'John'; for (const char of name) { console.log(char); } // Output: // J // o // h // n
Feature | for...in | for...of |
---|---|---|
Purpose | Iterates over object keys (including inherited properties) | Iterates over iterable values (arrays, strings, etc.) |
Works with Objects | Yes | No (objects are not iterable) |
Works with Arrays | Yes, but not ideal (returns indices) | Yes, ideal (returns values) |
Use Case | Best for iterating over object properties | Best for arrays, strings, maps, sets, etc. |
Sometimes, objects are nested, and you need to iterate through all levels of the object. Here's an example that uses recursion to handle nested objects.
const user = { name: 'John', age: 30, address: { city: 'New York', zip: 10001 } }; // Recursively iterate through the object function iterate(obj) { for (const [key, value] of Object.entries(obj)) { if (typeof value === 'object' && !Array.isArray(value)) { console.log(`Entering nested object: ${key}`); iterate(value); // Recursively call for nested objects } else { console.log(key, value); // Output key-value pair } } } iterate(user); // Output: // name John // age 30 // Entering nested object: address // city New York // zip 10001
Das obige ist der detaillierte Inhalt vonObjektiteration in JavaScript verstehen: „for...of' vs. „for...in'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!