Създаване на итерируем обект в JavaScript

Нека създадем истински итерируем обект, който може да бъде обходен чрез цикъл for-of. За това обектът трябва да добави съответна функция в Symbol.iterator.

Нека го реализираме. Да предположим, че имаме следния обект:

javascriptlet obj = {
  a: 1,
  b: 2,
  c: 3,
};

Добавяме функция в Symbol.iterator:

javascriptobj[Symbol.iterator] = function() {

}

Превръщаме тази функция в генератор:

javascriptobj[Symbol.iterator] = function *() {

}

Във функцията this ще сочи към самия обект:

javascriptobj[Symbol.iterator] = function *() {
  console.log(this); // самия обект
}

Стартираме обхождане на обекта в итератора:

javascriptobj[Symbol.iterator] = function *() {
  for (let key in this) {
    yield obj[key];
  }
}

Готово, обектът може да се обхожда с цикъл for-of:

javascriptfor (let elem of obj) {
  console.log(elem); // 1, 2, 3
}
Задание 1

Направете обект, който може да се обхожда с цикъл for-of. Нека в елемента на цикъла попадне обект, в ключ key на който ще бъде ключът на обхождания обект, а в ключ val - стойността. Пример:

javascriptlet obj = {a: 1, b: 2, c: 3};

for (let elem of obj) {
  console.log(elem);
}

Ще изведе:

javascript{key: 'a', val: 1}
{key: 'b', val: 2}
{key: 'c', val: 3}