【JavaScript】配列内の重複した要素をカウントする

やりたいこと

const array = [1, 1, 1, 2, 2, 3];

配列内で各要素がそれぞれ何個ずつ存在するのかを集計したい。

解決法

mapを使う方法

const array = [1, 1, 1, 2, 2, 3];
const map = array.reduce(
(acc, curr) => acc.set(curr, (acc.get(curr) || 0) + 1),
new Map()
);
console.log([...map.keys()]); // [1, 2, 3]
console.log([...map.values()]); // [3, 2, 1]
console.log([...map.entries()]); // [[1, 3], [2, 2], [3, 1]]

オブジェクトを使う方法

const array = [1, 1, 1, 2, 2, 3];
const counts = array.reduce(
(acc, curr) => ((acc[curr] = ++acc[curr] || 1), acc),
{}
);
console.log(counts); // {1: 3, 2: 2, 3: 1}