Sobes.tech
Junior
118
questionbank

Какие методы итерации вы знаете?

Answer from AI

sobes.tech AI

  • for
  • for...in
  • for...of
  • while
  • do...while
  • Методы массивов: forEach, map, filter, reduce, some, every
  • Итераторы (объекты, реализующие протокол итератора)
  • Генераторы (функции, возвращающие итераторы)

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

Метод Назначение Особенности
for Классический, гибкий Требует явного управления индексом и условием
for...in Перечисление свойств объекта Итерирует по ключам, включая унаследованные; не для массивов
for...of Итерация по итерируемым объектам (массивы, строки, Set, Map) Итерирует по значениям; не для обычных объектов
forEach Итерация по элементам массива/Set/Map Выполняет функцию для каждого элемента; не прерывается break
map Создание нового массива с результатами вызова функции Возвращает новый массив; не изменяет исходный
filter Создание нового массива с элементами, прошедшими проверку Возвращает новый массив; не изменяет исходный
reduce Сведение массива к одному значению Аккумулирует результат; гибкий
Итераторы/Генераторы Пошаговая итерация с явным управлением Позволяют создавать пользовательские итерируемые последовательности
// for loop
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

// for...in (для объектов)
const obj = { a: 1, b: 2 };
for (const key in obj) {
  console.log(key, obj[key]);
}

// for...of (для итерируемых)
const arr = [1, 2, 3];
for (const value of arr) {
  console.log(value);
}

// forEach
arr.forEach(item => {
  console.log(item);
});

// map
const newArr = arr.map(item => item * 2);
console.log(newArr); // [2, 4, 6]

// filter
const filteredArr = arr.filter(item => item > 1);
console.log(filteredArr); // [2, 3]

// reduce
const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 6

// Итератор
function createIterator(arr) {
  let index = 0;
  return {
    next() {
      if (index < arr.length) {
        return { value: arr[index++], done: false };
      } else {
        return { done: true };
      }
    }
  };
}
const it = createIterator([1, 2]);
console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: 2, done: false }
console.log(it.next()); // { done: true }

// Генератор
function* createGenerator(arr) {
  for (const item of arr) {
    yield item;
  }
}
const gen = createGenerator([1, 2]);
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: undefined, done: true }