Перебор Map со счетчиком итераций

67
16 декабря 2021, 23:50

Есть экземпляр Map, например

let rec = new Map([
  ["1", Buffer.from('a', 'hex')],
  ["2", Buffer.from('b', 'hex')],
]);

Можно ли его перебрать с помощью forEach так же, как с обычным одномерным массивом? Т.е., мне нужно в одном участке кода использовать "1", а в другом Buffer.from('b', 'hex')
Это возможно?

Answer 1

Это можно сделать так:

let rec = new Map([
  ["1", Buffer.from('a', 'hex')],
  ["2", Buffer.from('b', 'hex')],
]), index = 1;

Первый способ:

rec.forEach((key, value) => {
   console.log(index + ' - ' + key + ' = ' + value);
   ++index;
});

Второй способ:

for (var [key, value] of rec.entries()) {
  console.log(index + ' - ' + key + ' = ' + value);
  ++index;
}

Работать будет и без .entries() тоже.

Answer 2

Можно с помощью IIFE (счетчик в аргументе, и его инкремент "вручную"):

let rec = new Map([ 
  ['1', 'First value'], 
  ['2', 'Second value'], 
]); 
 
(idx => rec.forEach((val, key) => {        // idx - счетчик 
  console.log(idx++, ':', val);            // постинкремент на каждой итерации  
}))(0);                                    // 0 - начальное значение счетчика

Или через временный массив:

[...rec.entries()].forEach(([val, key], idx) => /*...*/);

Оба этих способа характерны тем что не требуют объявления внешней переменной для значения счетчика.
Второй способ кушает память - его желательно использовать только с небольшими словарями.

READ ALSO
Ссылка при попытке ухода с сайта

Ссылка при попытке ухода с сайта

Я часто видел, что при попытке навести на крестик, сайт что-то предлагаетКак это реализовано?

221
Как установить язык в headers?

Как установить язык в headers?

Как в "Accept-Language" установить язык через jquery? Я определяю язык через "Accept-Language"Пытаюсь, чтобы все запросы шли с запросом другого языка, но headers...

173
Input radio выпадющее меню с помощью jquery

Input radio выпадющее меню с помощью jquery

https://codepenio/bogdan-babjchuk/pen/gObaeOR

192
Отследить пролистывание экрана

Отследить пролистывание экрана

У меня есть приложение - читалка, которое выводит на экран (отдельная активность) информацию из текстовых файлов, подтягивая его из rawВсе эти...

183