ООП в JavaScriptИтераторыmedium

Iterable Object

Как мы знаем, с помощью цикла for-in можно перебрать ключи объекта.

const obj = { a: 100, b: 200, c: 300 }; for(const key in obj) { console.log(key); // "a", "b", "c" }

Но что если мы хотим перебирать пары ключ-значаение у объекта с помощью for-of (как у Map).

for(const [key, value] of obj) { console.log(key, value); }

Реализуйте возможность перебирать пары ключ-значаение у любых объектов в джаваскрипте.

Зачем это нужно?

С таким подходом можно, например, фильтровать объекты по ключам без создания дополнительных массивов.

Как мы это делаем сейчас:

// Object.entries создает лишний временный массив // filter тоже создает лишний массив const filteredObj = Object.fromEntries( Object.entries(obj).filter(([_, value]) => value > 100) ); console.log(filteredObj);

Если бы объект был iterable, мы могли бы сэкономить:

// Iterator.from и filter не тратят память const filteredObj2 = Object.fromEntries( Iterator.from(obj).filter(([_, value]) => value > 100) ); console.log(filteredObj2);