Выбор ответа Middle Массивы и хеш-таблицы обновлено

Объект или Map для частот

Вопрос

Считаем частоты элементов массива, где встречаются и числа, и строки (1 и "1" разные значения). Что выбрать?

const freq = {};
for (const x of [1, '1', 1]) freq[x] = (freq[x] || 0) + 1;
console.log(freq); // ?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Map: ключ любого типа, 1 и "1" различаются. У объекта ключи приводятся к строке, поэтому 1 и "1" попадут в одну ячейку.

Варианты ответа

  1. Обычный объект {}: ключи сохраняют исходный тип
  2. Set: он хранит количество повторов каждого значения
  3. WeakMap: он быстрее для примитивных ключей
  4. Map: ключ любого типа, 1 и "1" различаютсяправильный ответ

Разбор

У объекта ключи приводятся к строке, поэтому 1 и "1" попадут в одну ячейку. Map сравнивает ключи по SameValueZero, типы различаются.

  • Объект не сохраняет тип ключа.
  • Set хранит только факт наличия.
  • WeakMap принимает в ключи только объекты (и незарегистрированные символы), примитивы нельзя.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.