javascript - 如何计算数组中出现的次数并将其转换为对象数组?
问题描述
我正在尝试接收一组名称(带有重复项)并输出一组对象。
输入:单个数组
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}
]
*/
解决方案
按元素索引累加器,增加匹配键的计数,最后去掉索引(使用 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)
推荐阅读
- string - XSLT 中的整数到字符串的转换
- android - 如何解决 Qt Creator 中 Android 项目的构建错误“找不到 -lc++”?
- mysql - 声明变量的默认值是否始终为空?
- android - ViewPager 中的视频没有暂停
- vue.js - 如何在 vuejs 中将 $ref 设置为来自父组件的子组件元素?
- .net - LINQ 查询以获取最低和最高价格范围内的所有产品?
- bash - 将单个变量中的值列表视为多个单独的值 (bash)
- java - 用于检查输入参数的 Java 选项
- debugging - Protractor Visual Studio 代码调试错误无法连接到运行时进程,10000 秒后超时
- javascript - Angular 2+:子组件 ts 变量更改但 UI 未显示更改的值?