1.1 Основные понятия
Итераторы и итерируемые объекты (iterables) в JavaScript являются фундаментальными концепциями, которые позволяют объектам быть перебираемыми. Эти концепции широко используются в современном JavaScript, особенно в таких конструкциях, как циклы for...of, оператор распространения (spread operator), деструктуризация и многие другие. В этой лекции мы рассмотрим, что такое iterables и iterators, как они работают и как их создавать и использовать.
Iterables (Итерируемые объекты)
Итерируемые объекты — это объекты, которые реализуют протокол итерации. У них должен быть специальный метод с ключом [Symbol.iterator], который возвращает объект-итератор.
Iterators (Итераторы)
Итератор — это объект с методом next(), который возвращает объект с двумя свойствами:
value— значение следующего элемента последовательностиdone— булево значение, указывающее, закончилась ли последовательность (true) или нет (false)
Рассмотрим примеры использования.
Встроенные итерируемые объекты
JavaScript имеет несколько встроенных итерируемых объектов, включая массивы, строки, объекты Set и Map.
Пример 1: Итерирование массива
const array = [1, 2, 3, 4, 5];
for (const item of array) {
console.log(item);
}
// Выведет: 1 2 3 4 5
Пример 2: Итерирование строки
const string = 'hello';
for (const char of string) {
console.log(char);
}
// Выведет: h e l l o
1.2 Создание своих итераторов
Вы можете создать собственный итератор, реализуя протокол итерации — создание метода next().
Пример 1: Создание итератора
function createIterator(array) {
let index = 0;
return {
next: function() {
if (index < array.length) {
return { value: array[index++], done: false };
} else {
return { done: true };
}
}
};
}
const myIterator = createIterator([1, 2, 3]);
console.log(myIterator.next()); // { value: 1, done: false }
console.log(myIterator.next()); // { value: 2, done: false }
console.log(myIterator.next()); // { value: 3, done: false }
console.log(myIterator.next()); // { done: true }
Создание итерируемых объектов
Чтобы объект стал итерируемым, он должен реализовать метод [Symbol.iterator]. Да, это такое хитрое название. Вот как его создать.
Пример 2: Создание итерируемого объекта
const myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
};
for (const value of myIterable) {
console.log(value);
}
// Выведет: 1 2 3
1.3 Встроенные методы
Рассмотрим встроенные методы и операторы для работы с итерируемыми объектами.
Пример 1: Оператор spread
Оператор spread (...) может использоваться для копирования или объединения итерируемых объектов.
const array = [1, 2, 3];
const newArray = [...array, 4, 5, 6];
console.log(newArray); // Выведет: [1, 2, 3, 4, 5, 6]
Пример 2: Деструктуризация
Деструктуризация позволяет извлекать значения из итерируемых объектов.
const [first, second, third] = [1, 2, 3];
console.log(first); // Выведет: 1
console.log(second); // Выведет: 2
console.log(third); // Выведет: 3
Пример 3: Методы Array.from и Array.of
Метод Array.from() позволяет создать массив из итерируемого объекта.
const set = new Set([1, 2, 3, 4, 5]);
const array = Array.from(set);
console.log(array); // Выведет: [1, 2, 3, 4, 5]
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ