Вызовы итератора в JavaScript

Каждый последовательный вызов итератора должен возвращать объект специальной структуры. Давайте ее рассмотрим. Пусть у нас есть массив:

javascriptlet arr = [1, 2, 3];

Получим итератор массива в переменную:

javascriptlet iter = arr[Symbol.iterator]();

Теперь в этой переменной содержится объект с методом next. Этот метод будет возвращать объект с ключом value, содержащим значение элемента, и ключом done, содержащим информацию о том, закончился ли перебор или нет:

javascriptconsole.log( iter.next() ); // {value: 1, done: false}

Последовательный вызов метода next будет каждый раз выдавать следующий элемент:

javascriptconsole.log( iter.next() ); // {value: 1, done: false}
console.log( iter.next() ); // {value: 2, done: false}
console.log( iter.next() ); // {value: 3, done: false}

А как только элементы закончатся, мы увидим следующие значения:

javascriptconsole.log( iter.next() ); // {value: undefined, done: true}
Задание 1

Получите итератор коллекции Map. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Задание 2

Получите итератор коллекции NodeList. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Задание 3

Получите итератор коллекции HTMLCollection. Последовательно вызывайте его, пока элементы коллекции не закончатся.