Посчитать все уникальные элементы в массиве (нужно альтернативное решение)
По условию Функция должна вернуть 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'ам не отображается, проверить его правильность можно в любом редакторе.