首页 > 解决方案 > Java脚本计算字典列表中的重复项

问题描述

我需要帮助通过计算重复项并将它们放在一个数组中来合并字典列表。

示例输入

var arr = [{name: "Bob", group: "Group2"},

{name: "Peter", group: "Admin"},

{name: "John", group: "Group1"},

{name: "Tom", group: "Group1"},

{name: "Tom", group: "Group1"},

{name: "Tom", group: "Group1"},

{name: "Tom", group: "Admin"},

{name: "Tom", group: "Group2"}]

预期产出

名称、Group1 的 #、Group2 的 #、管理员的 # 超级用户的 #

["Bob",0,1,0,0]

["Peter",0,0,1,0]

["John",1,0,0,0]

["Tom",3,1,1,0]

标签: javascriptarrayslistdictionary

解决方案


这可以通过标准reduce操作来完成,使用对象来查找具有相同名称的元素的频率。

var arr = [{name: "Bob", group: "Group2"},
{name: "Peter", group: "Admin"},
{name: "John", group: "Group1"},
{name: "Tom", group: "Group1"},
{name: "Tom", group: "Group1"},
{name: "Tom", group: "Group1"},
{name: "Tom", group: "Admin"},
{name: "Tom", group: "Group2"}];
const idxMap = {Group1: 1, Group2: 2, Admin: 3, Superuser: 4};
const res = Object.values(
  arr.reduce((acc, {name, group})=>{
    acc[name] = acc[name] || [name,0,0,0,0];
    acc[name][idxMap[group]]++;
    return acc;
  }, {})
);
console.log(res);


推荐阅读