在我当前的代码中,我有一个名称数组,它通过 reduce() 变成一个对象,任何重复的名称都会增加一个计数值。
初始数组(nameArray):
["Name1","Name2","Name2","Name2","Name3","Name4","Name5"]
减少代码:
const nameCount = nameArray.reduce((a, b) => {
a[b] = (a[b] || 0) + 1
return a
}, {})
减少输出:
{"Name1":1,"Name2":3,"Name3":1,"Name4":1,"Name5":1}
我想把它的格式改成这样:
[
{
"name": Name1,
"count": 1
},
{
"name": Name2,
"count": 3
},
{
"name": Name3,
"count": 1
}
...etc
]
仅使用 reduce 就可以做到这一点吗?最好、最有效的方法是什么? 我已经尝试更改我的 reduce 代码,但无法使其正常工作,我对解决方案的搜索也没有任何结果。
感谢任何帮助!
最佳答案
您可以在 reduce
方法中创建所需的数组,但效率不高,因为每次您都需要按 name
进行搜索以更新计数。
一种简单的方法是使用 Object.keys
方法。
var nameArray = ["Name1","Name2","Name2","Name2","Name3","Name4","Name5"]
const nameCount = nameArray.reduce((a, b) => {
a[b] = (a[b] || 0) + 1
return a
}, {})
console.log(Object.keys(nameCount).map(key => ({name : key, count: nameCount[key]})));
关于javascript - 我可以使用 reduce 将数组转换为具有自定义键并计算重复值的对象数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355620/