【问题标题】:Java script Count duplicates in list of dictionariesJavascript计算字典列表中的重复项
【发布时间】:2020-08-20 16:54:45
【问题描述】:

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

输入示例

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]

【问题讨论】:

  • 这个数组是否已经按对象名称排序?

标签: javascript arrays list dictionary


【解决方案1】:

这可以通过标准的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);

【讨论】:

  • 对于那些觉得计数很无聊的人:const idxMap = Object.fromEntries("Group1,Group2,Admin,Superuser".split(",").map((g, i) => [g, i+1]));
【解决方案2】:

您可以将每个用户名的数字分组到 Map 中,然后将数据放入数组中:

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"}
];
let map = {};
let groupCategory = {
     'Group1':0, 'Group2':1, 'Admin':2, 'SuperUser':3
};
arr.forEach(user => {
     let group = groupCategory[user.group];
     if(!map[user.name])
          map[user.name] = [0,0,0,0];
     map[user.name][group]++;
});
arr = Object.entries(map).map(e => {
     return [e[0], ...e[1]];
});
console.log(arr);

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2017-01-13
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多