Методы, возвращающие итераторы. Массивы

Следующие методы возвращают специальный объект — итератор:

  • keys() — возвращает итератор, содержащий индексы элементов массива:
const process = require('process');
let arr = [ 1, 2, 3 ];
let iterator = arr.keys();
console.log(iterator); // Object [Array Iterator] {}
// Перебор всех элементов
for (const key of iterator) {
   process.stdout.write(`${key} `);
} // 0 1 2
console.log();
// Преобразование в массив
let arrKeys = [...arr.keys()];
console.log(arrKeys);  // [ 0, 1, 2 ]
  • values() — возвращает итератор, содержащий значения элементов массива:
const process = require('process');
let arr = [ 1, 2, 3 ];
let iterator = arr.values();
// Перебор всех элементов
for (const value of iterator) {
   process.stdout.write(`${value} `);
} // 1 2 3
console.log();
// Преобразование в массив
let arrValues = [...arr.values()];
console.log(arrValues);  // [ 1, 2, 3 ]
  • entries() — возвращает итератор, содержащий пары индекс/значение всех элементов массива:
const process = require('process');
let arr = [ 1, 2, 3 ];
let iterator = arr.entries();
// Перебор всех элементов
for (const [key, value] of iterator) {
   process.stdout.write(`${key} => ${value} `);
} // 0 => 1 1 => 2 2 => 3
console.log();
// Преобразование в массив
let arrEntries = [...arr.entries()];
console.log(arrEntries);  // [ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ] ]

Создать итератор, содержащий значения элементов массива, можно также следующим способом:

const process = require('process');
let arr = [ 1, 2, 3 ];
let iterator = arr[Symbol.iterator]();
console.log(iterator); // Object [Array Iterator] {}
// Перебор всех элементов
for (const value of iterator) {
   process.stdout.write(`${value} `);
} // 1 2 3

Цикл for...of на каждом шаге вызывает метод next() объекта итератора. В принципе мы можем вызвать метод next() и сами:

let arr = [ 1, 2, 3 ];
let iterator = arr.values();
// Перебор всех элементов
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 3
console.log(iterator.next().value); // undefined

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов