javascript - 希望按子数组中的值对数组进行分组
问题描述
尝试解析一个具有一堆相同“辅助ID”的数据集,以便我可以将它们分组并一起迭代。
在英语中,我试图做的是“选择字段值唯一的所有项目的唯一组”
'use strict';
const data = [{
Group: 'A',
Name: 'SD'
}, {
Group: 'B',
Name: 'FI'
}, {
Group: 'A',
Name: 'MM'
}, {
Group: 'B',
Name: 'CO'
}];
let unique = [...new Set(data.map(item => item.Group))];
console.log(unique);
这给出了 ["A"],["B"]
但我要找的是
{
A: [ "SD","MM" ],
B: [ "FI","CO" ],
}
解决方案
为此,我会使用array.reduce
而不是array.map
因为您实际上希望返回的是一个新值,而不是修改后的数组,当您想将数组从字面上减少为单个输出值时,reduce 方法是完美的,在您的情况下唯一组的对象。也许尝试这样的事情:
let unique = data.reduce((acc, { Group, Name }) => {
if (!(acc.hasOwnProperty(Group))) {
acc[Group] = [Name];
} else {
acc[Group].push(Name);
};
return acc;
}, {});
我还为此添加了一支笔:https ://codepen.io/anon/pen/BGpgdz?editors=1011 ,这样您就可以看到它的工作原理。
希望这可以帮助!
推荐阅读
- regex-lookarounds - 基于 Python 的正则表达式来匹配来自混合数据集的 twitter 用户名
- spring-data-jpa - 如何使用 Spring Data JPA 审计和 Envers 跟踪删除事件?
- javascript - ArrayInput 可以保存键:'值'吗?
- mysql - 在 VIEW 中运行总计
- android - Firestore 忽略对象中的空值
- python - Python - 如何更改按钮列表中一个按钮的颜色
- c++ - 当其中一个为负时,如何将两个 16 位值组合成一个 32 位值?
- java - Java流flatMap,将第一级和第二级对象保留在流中
- netsuite - Netsuite 将发票转换为自定义记录计划脚本
- vega - 如何从点击事件中获取规范内的缩放坐标?