Перебор Map: порядок вставки и порядок аргументов
Map позволяет перебирать записи в порядке добавления ключей. Это полезно для справочника соответствий, где ключи и значения нужны одновременно.
Назначение
Map позволяет перебирать записи в порядке добавления ключей. Это полезно для справочника соответствий, где ключи и значения нужны одновременно.
Как это работает
For…of по Map выдаёт пары ключа и значения. У forEach аргументы обратны привычной паре: сначала значение, затем ключ. Обновление существующего ключа не переносит его автоматически в конец.
Пример
const labels = new Map([["html", "Разметка"], ["css", "Стили"]]);
labels.set("html", "HTML-разметка");
console.assert([...labels.keys()].join(",") === "html,css");
const lines = [];
labels.forEach((value, key) => lines.push(key + ": " + value));
console.assert(lines[0] === "html: HTML-разметка");
for (const [key, value] of labels) console.log(key, value);
Что должно получиться
Обновлённый html остаётся первой записью. Массив lines содержит подписи, сформированные с правильным порядком аргументов. Перебор не преобразует ключи в строки автоматически, если они другого типа.
Граница применения и частая ошибка
Не изменяйте структуру коллекции во время обхода без понимания правил итерации. Map не равен обычному объекту JSON: его сериализация требует выбранного представления. Если нужен фиксированный снимок пар, создайте его отдельно.
Самостоятельная проверка
Удалите первый ключ и добавьте его снова, затем сравните порядок. Добавьте числовой ключ 1 и строковый "1" и убедитесь, что это разные записи. Перепишите один обход с forEach на for…of.
Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.