javascript - 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]
解决方案
这可以通过标准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);
推荐阅读
- python - 如何使用 selenium 和 python 允许基于浏览器的弹出窗口
- python - id() 用于 python 3.x 中的复数
- mongodb - Mongorestore 行为
- php - 在 Laravel 中登录后将接口绑定到实现
- go - *time.Time 不是 proto.Message:缺少方法 ProtoMessage
- android - 如果使用 setVariable() 方法设置 ViewModel,则 DataBinding 不起作用
- python - 我想从 xlsx 中提取 10 张表并将所有 10 张表导出为 python 中的 csv 格式
- java - 如何使用 java cucumber 将“#”作为特征文件中的有效参数传递
- python - 使用 pip 在 Windows 上安装 Fiona 错误
- postgresql - 在每日 2 小时 CPU 峰值期间,RDS PostgreSQL DB 缓慢和超时