javascript - 如何在 Javascript 中的 Map 中添加对象数组
问题描述
我想要一个 Map,其中键是唯一 id,值将是与唯一 id 对应的对象数组。示例数据
const exampleData = [
{id: 1,
name: "Tony",
},
{id: 2,
name: "Lori"
},
{id: 2,
name: "Pete"
},
{id: 2,
name: "Brandon"
},
];
这是我尝试过的
let map = new Map();
filteredArray.map(array => {
map.set(array.assessmentId, [...map.get(array.assessmentId), array]);
});
我想要的结果:
Map (
[key: 1,
value: [id: 1, Name: Tony],
],
[key:2,
value:[id: 2, Name: Lori],[id: 2, Name: Pete], [id: 2, Name: Brandon]
])
解决方案
如果要对数据进行分组,可以减少项目并将每个项目连接到由id
属性键控的数组。
const data = [
{ id: 1, name: "Tony", },
{ id: 2, name: "Lori" },
{ id: 2, name: "Pete" },
{ id: 2, name: "Brandon" },
];
const grouped = new Map(Object.entries(data.reduce((result, item) => ({
...result,
[item.id]: [ ...(result[item.id] || []), item ]
}), {})));
console.log(...grouped);
.as-console-wrapper { top: 0; max-height: 100% !important; }
输出
{
"1": [
{ "id": 1, "name": "Tony" }
],
"2": [
{ "id": 2, "name": "Lori" },
{ "id": 2, "name": "Pete" },
{ "id": 2, "name": "Brandon" }
]
}
这是一个可重用的功能:
const groupDataByKey = (data, key) =>
new Map(Object.entries(data.reduce((result, item) => ({
...result,
[item[key]]: [ ...(result[item[key]] || []), item ]
}), {})));
const exampleData = [
{ id: 1, name: "Tony", },
{ id: 2, name: "Lori" },
{ id: 2, name: "Pete" },
{ id: 2, name: "Brandon" },
];
console.log(...groupDataByKey(exampleData, 'id'));
.as-console-wrapper { top: 0; max-height: 100% !important; }
推荐阅读
- puppet - How to download puppet manifest file from master using agent?
- javascript - 如何在 php html css js 中创建网格视图/列表视图?
- c# - Google People Api 联系人已创建,但我在任何地方都看不到它
- go - 如何检查两个结构是否相等
- c# - 在 ASP.NET Core MVC 中保留下拉值
- javascript - 在打字稿(javascript)中向类方法添加方法
- java - ElasticSearch - 模糊搜索 java api 结果不正确
- python - 在 CloudML 中的 Tensorflow 中读取 pandas pickle 文件
- python - Numpy polyval 输出 y 的大小与输入 x 不同
- encryption - rsa - 从密文计算明文