Iterowalne obiekty to takie, które implementują metodę @@iterator (dostępną jako [Symbol.iterator]).
Przykładami iterowalnych obiektów są:
- Tablice (Array),
- Mapy (Map),
- Zbiory (Set),
- Napis (String),
- Obiekty generatorów.
Jak iterować po zwykłym obiekcie ({})?
- korzystając z narzędzi takich jak Object.keys, Object.values, czy Object.entries
const obj = { a: "b", c: "d" };
for (const key of Object.keys(obj)) {
console.log(key); // "a", "c"
}
const obj = { a: "b", c: "d" };
for (const value of Object.values(obj)) {
console.log(value); // "b", "d"
}
const obj = { a: "b", c: "d" };
for (const [key, value] of Object.entries(obj)) {
console.log(key, value); // "a b", "c d"
}
Jak uczynić obiekt iterowalnym?
Jeśli chcesz, aby obiekt zachowywał się jak iterowalny, możesz ręcznie zaimplementować metodę [Symbol.iterator]. Oto przykład:
const obj = { a: "b", c: "d" };
obj[Symbol.iterator] = function* () {
for (const key of Object.keys(this)) {
yield [key, this[key]]; // Zwracaj pary klucz-wartość
}
};
const map = new Map(obj); // Teraz działa
console.log(map); // Map(2) { 'a' => 'b', 'c' => 'd' }