JavaScript实现JSON数组按unit分组统计账号数量及去重账号名
实现思路
按unit字段对原数组分组,分别统计每个分组的总条目数、对账号名去重存储,最后把分组映射对象转为数组即可得到目标结果。
完整实现代码
// 原始数据 const jsondata = [ {"unit": "H1", "account": "ambro","domain": "DFRE"}, {"unit": "H1","account": "ambro","domain": "DFRE"}, {"unit": "H2","account": "Honda","domain": "HRO"}, {"unit": "H2","account": "ford","domain": "HRO"} ]; // 用对象做分组映射 const groupMap = {}; jsondata.forEach(item => { const unitKey = item.unit; // 不存在对应分组则初始化 if (!groupMap[unitKey]) { groupMap[unitKey] = { unitname: unitKey, no_of_accounts: 0, // 用Set存储账号自动去重,大数据量下性能优于数组includes判断 accounts_name: new Set() }; } // 累加当前分组总条目数 groupMap[unitKey].no_of_accounts += 1; // 存入账号(Set自动去重) groupMap[unitKey].accounts_name.add(item.account); }); // 转换为最终输出格式,可搭配sort调整账号顺序 const result = Object.values(groupMap).map(group => ({ ...group, // 不需要调整顺序可去掉.sort() accounts_name: Array.from(group.accounts_name).sort() })); // 打印结果 console.log(result);
输出结果
[ { unitname: 'H1', no_of_accounts: 2, accounts_name: [ 'ambro' ] }, { unitname: 'H2', no_of_accounts: 2, accounts_name: [ 'Honda', 'ford' ] } ]
内容的提问来源于stack exchange,提问作者kesav murthi
相关产品推荐
相关产品推荐

