首页 > 解决方案 > 如何计算数组中出现的次数并将其转换为对象数组?

问题描述

我正在尝试接收一组名称(带有重复项)并输出一组对象。

输入:单个数组

const arr = ['M', 'M', 'M', 'S', 'S', 'S', 'R', 'C', 'S', 'S', 'S']

输出:对象数组

[
  {
    name: 'M'
    duplicates: 3
  },
  {
    name: 'S'
    duplicates: 6
  }...
]

我已经尝试过这个解决方案,但这给了我每个数组项的名称作为键名。那不是我想要的。

这是我当前的代码:

const result = arr.reduce((acc, curr) => {
    acc[curr] ??
        (acc[curr] = {
            [curr]: 0,
        })
    acc[curr][curr]++
    return acc
}, [])
console.log(result)

/*output:
[
  C: {C: 1}
  M: {M: 3}
  R: {R: 1}
  S: {S: 6}
]
*/

标签: javascriptarraysalgorithmreducemultiple-occurrence

解决方案


按元素索引累加器,增加匹配键的计数,最后去掉索引(使用 Object.values)......

const arr = ['M', 'M', 'M', 'S', 'S', 'S', 'R', 'C', 'S', 'S', 'S'];

let result = Object.values(arr.reduce((acc, el) => {
  if (!acc.hasOwnProperty(el)) acc[el] = { name: el, duplicates: 0 };
  acc[el].duplicates++;
  return acc;
}, {}));


console.log(result)


推荐阅读