javascript - 我可以使用 reduce 将数组转换为具有自定义键并计算重复值的对象数组吗?

标签 javascript arrays data-manipulation

在我当前的代码中,我有一个名称数组,它通过 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/

相关文章:

javascript - swfObject 嵌入对象在 ie11 中不起作用

c - 在C中随机生成数组元素

java - 将动态 string[] 拆分为固定大小的数组

R:如何以仅取出一列中只有一个字符的行为条件对数据进行子集化

r - 根据R中特定字符分隔的行中的数据创建新列

javascript - 如何在保持可维护性的同时分离关注点(JS、HTML)?

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - 将python的json对象转换为html表?

java - 从数组中删除重复的字符串?

r - 比较如果条件满足,则重置序列的有效方法( R )