В этом руководстве вы узнаете об итераторах и итераторах JavaScript с помощью примеров.
Итерации и итераторы JavaScript
JavaScript предоставляет протокол для перебора структур данных. Этот протокол определяет, как эти структуры данных перебираются с помощью for… ofцикла.
Концепцию протокола можно разделить на:
- повторяемый
- итератор
Протокол итерации упоминает, что итерация должна иметь Symbol.iteratorключ.
Итерируемые объекты JavaScript
Структуры данных, в которых есть Symbol.iterator()метод, называются итерируемыми. Например, массивы, строки, множества и т. Д.
Итераторы JavaScript
Итератор - это объект, возвращаемый Symbol.iterator()методом.
Протокол итератора предоставляет next()метод для доступа к каждому элементу итерации (структуры данных) по одному.
Давайте посмотрим на пример итераций, имеющих Symbol.Iterator()
const arr = (1, 2 ,3); // calling the Symbol.iterator() method const arrIterator = arr(Symbol.iterator)(); // gives Array Iterator console.log(arrIterator); const str = 'hello'; // calling the Symbol.iterator() method const strIterator = str(Symbol.iterator)(); // gives String Iterator console.log(strIterator);
Вывод
Итератор массива () StringIterator ()
Здесь вызов Symbol.iterator()метода как массива, так и строки возвращает их соответствующие итераторы.
Итерировать по итерациям
Вы можете использовать for… ofцикл для перебора этих повторяемых объектов. Вы можете повторить этот Symbol.iterator()метод следующим образом:
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Вывод
1 2 3
Или вы можете просто перебирать массив следующим образом:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Здесь итератор позволяет for… ofциклу перебирать массив и возвращать каждое значение.
Метод JavaScript next ()
У объекта итератора есть next()метод, который возвращает следующий элемент в последовательности.
next()Метод содержит два свойства: valueа done.
- Значение свойство может быть любого типа данных и представляет собой текущее значение в последовательности.
value - сделано свойство является логическое значение, указывающее , является ли итерация завершена или нет. Если итерация не завершена, свойство устанавливается на , в противном случае - на .
donedonefalsetrue
Давайте посмотрим на пример итерации массива:
const arr = ('h', 'e', 'l', 'l', 'o'); let arrIterator = arr(Symbol.iterator)(); console.log(arrIterator.next()); // (value: "h", done: false) console.log(arrIterator.next()); // (value: "e", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "o", done: false) console.log(arrIterator.next()); // (value: undefined, done: true)
Вы можете вызывать next()несколько раз, чтобы перебирать arrIteratorобъект.
next()Метод возвращает объект с двумя свойствами:valueаdone.- Когда
next()метод достигает конца последовательности,doneсвойство устанавливается вfalse.
Давайте посмотрим, как for… ofцикл выполняет указанную выше программу. Например,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Вывод
Здравствуйте
for… ofЦикл делает точно так же , как программа выше.
for… ofПетля удерживает вызов next()метода итератора. Как только он достигнет done:true, for… ofцикл завершится.
Итератор, определяемый пользователем
Вы также можете создать свой собственный итератор и вызвать его next()для доступа к следующему элементу. Например,
function displayElements(arr) ( // to update the iteration let n = 0; return ( // implementing the next() function next() ( if(n < arr.length) ( return ( value: arr(n++), done: false ) ) return ( value: undefined, done: true ) ) ) ) const arr = ('h', 'e', 'l', 'l', 'o'); const arrIterator = displayElements(arr); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next());
Вывод
(значение: «h», готово: ложь) (значение: «е», готово: ложь) (значение: «l», готово: ложь) (значение: «l», готово: ложь) (значение: «o» , сделано: false) (значение: undefined, done: true)
В приведенной выше программе мы создали собственный итератор. В displayElements()функции возвращает valueи doneсвойство.
- Каждый раз при
next()вызове метода функция выполняется один раз и отображает значение массива. - Наконец, когда все элементы массива будут исчерпаны, то
doneсвойство имеет значениеtrue, с ,valueкакundefined.








