Посчитать все уникальные элементы в массиве (нужно альтернативное решение)

По условию Функция должна вернуть Map, в котором ключи - все уникальные элементы в массиве, а значения - количество этих элементов в массиве.

Пример:

const obj = { name: 123 };
const data = [1, 1, 1, 2, 2, 2, 2, true, true, obj, obj, { name: 123 }];
const counts = getArraysCounts(data); // экземпляр Map
console.log(counts.get(1)); // 3
console.log(counts.get(2)); // 4
console.log(counts.get(true)); // 2
console.log(counts.get(obj)); // 2

Подскажите какие ещё варианты есть решения данной задачи имеются, хотелось бы взглянуть на альтернативное решение.

Мой вариант:

const getArraysCounts = (arr) => {
 const counts = arr.reduce((acc, item) => {
  if(acc.has(item)) {
  const count = acc.get(item) + 1;
  acc.set(item, count);
 }else {
     acc.set(item, 1)
 }
    return acc;
}, new Map());
    return counts;
}

Ответы (1 шт):

Автор решения: Vasily

Альтернативно, без reduce():

const obj = { name: 123 }
const data = [1, 1, 1, 2, 2, 2, 2, true, true, obj, obj, { name: 123 }]

const countItems = items => {
    const map = new Map()

    for (const item of items) {
        map.set(item, map.has(item) ? map.get(item) + 1 : 1)
    }
    return map
}

console.log(countItems(data))
// Map {
//   1 => 3,
//   2 => 4,
//   true => 2,
//   { name: 123 } => 2,
//   { name: 123 } => 1
// }

Результат в сниппетах SO по Map'ам не отображается, проверить его правильность можно в любом редакторе.

→ Ссылка