javascript - 查找具有相同属性值的对象并将它们添加到新的数组属性中
问题描述
我有一个包含对象的数组,这些对象具有一个名为“operationGroup”的对象属性和“groupId”属性,如下所示:
[{
operation: 11111,
operationGroup: null
},
{
operation: 22222,
operationGroup: {
groupId: 20
}
},
{
operation: 33333,
operationGroup: {
groupId: 1
}
},
{
operation: 44444,
operationGroup: {
groupId: 20
}
}
]
如何找到具有相同 groupId 的所有对象并将它们添加到具有该 groupId 的每个对象中的新数组属性 (groupedOperations) 中?如果 operationGroup 为 null 或仅找到一个 groupId,则不应添加数组属性。预期的输出是这样的:
[{
operation: 11111,
operationGroup: null
},
{
operation: 22222,
operationGroup: {
groupId: 20
},
groupedOperations: [{
operation: 22222,
operationGroup: {
groupId: 20
},
{
operation: 44444,
operationGroup: {
groupId: 20
}
}
}]
},
{
operation: 33333,
operationGroup: {
groupId: 1
}
},
{
operation: 44444,
operationGroup: {
groupId: 20
},
groupedOperations: [{
operation: 44444,
operationGroup: {
groupId: 20
}
},
{
operation: 22222,
operationGroup: {
groupId: 20
},
}
]
}
]
解决方案
let reqArray =[{
operation: 11111,
operationGroup: null
},
{
operation: 22222,
operationGroup: {
groupId: 20
}
},
{
operation: 33333,
operationGroup: {
groupId: 1
}
},
{
operation: 44444,
operationGroup: {
groupId: 20
}
}
]
let groups = {}
let groupReq = []
for (let req of reqArray) {
if (!req.operationGroup) continue;
if (!groups[req.operationGroup.groupId]) groups[req.operationGroup.groupId] = [];
groups[req.operationGroup.groupId].push(req)
}
for(let req of reqArray){
if(req.operationGroup && groups[req.operationGroup.groupId].length >= 2 ){
req.groupedOperations = groups[req.operationGroup.groupId]
}
groupReq.push(req)
}
console.log(groupReq,groups)
首先根据groupId对所有操作进行过滤和分组。然后再次循环请求数据以更新 groupedOperations 属性
推荐阅读
- github - 我们可以使用 GitHub API 创建提交吗?特别是v4?
- python - 在 Sphinx/Jinja 中使用标签/关键字创建一个页面,其中包含指向包含所述标签/关键字的所有其他页面的链接列表
- php - 为什么我不能从文档根目录之外投射由 PHP 提供的 MP4 文件?
- php - 配置 Apache 以接受任何主机请求
- r - 如何使用 R 创建时间序列螺旋图
- botframework - 如何从瀑布中的 TextPrompt 获得 Luis 得分最高的意图(Bot Framework v4)
- android - 如何杀死其他进程或在应用程序中使用 adb 命令行
- compiler-construction - Bison 意外令牌导致语法错误
- javascript - 选择选项的自定义属性并从 Angular 5 中的 AbstractControl 访问它?
- c - 在用 C 编写的自定义 shell 程序中重定向 I/O