Junior
118
questionbank
Какие методы итерации вы знаете?
Answer from AI
sobes.tech AI
forfor...infor...ofwhiledo...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 }