首页 > 解决方案 > 对 JavaScript 数组中的相同值进行分组

问题描述

let array = ['a', 'a', 'a', 'b', 'b', 'c'];

我想对数组中的双精度值进行分组,以获得如下结果:

结果:( ['3a, 2b, c']
或类似的东西)

任何想法?

标签: javascriptarraysdictionaryfilterreduce

解决方案


您可以使用.reduce().map()方法:

let array = ['a', 'a', 'a', 'b', 'b', 'c'];

let result = Object.entries(
    array.reduce((r, c) => (r[c] = (r[c] || 0) + 1, r) , {})
).map(([k, v]) => v == 1 ? k : v + k);

console.log(result);

Map如果您需要特定顺序的项目,您也可以使用:

let array = ['a', 'a', 'a', 'b', 'b', 'c'];

let result = (((arr, map) => {
    arr.forEach(s => map.set(s, (map.get(s) || 0) + 1));
    return [...map.entries()].map(([k, v]) => v == 1 ? k : v + k);
})(array, new Map()));

console.log(result);


推荐阅读