Выбор ответа Middle Разминка: короткие функции обновлено

uniqueBy через Map: кто останется

Вопрос

Что вернёт uniqueBy(items, 'id')?

const uniqueBy = (arr, key) =>
  [...new Map(arr.map((x) => [x[key], x])).values()];
const items = [
  { id: 1, v: 'a' },
  { id: 2, v: 'b' },
  { id: 1, v: 'c' },
];

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

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

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

Коротко

Правильный ответ: [{ id: 1, v: 'c' }, { id: 2, v: 'b' }]. new Map(entries) вызывает set для каждой пары.

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

  1. [{ id: 1, v: 'a' }, { id: 2, v: 'b' }]
  2. [{ id: 2, v: 'b' }, { id: 1, v: 'c' }]
  3. [{ id: 1, v: 'c' }, { id: 2, v: 'b' }]правильный ответ
  4. [{ id: 1, v: 'a' }, { id: 2, v: 'b' }, { id: 1, v: 'c' }]

Разбор

new Map(entries) вызывает set для каждой пары. Повторный set с существующим ключом заменяет значение, но не меняет позицию ключа: порядок в Map определяется первой вставкой. Поэтому ключ 1 остаётся первым, а значением становится последний объект { id: 1, v: 'c' }. Если нужно оставить первое вхождение, проверяйте has перед записью или фильтруйте через Set уже виденных ключей.

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

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