Javascript 查找具有相同属性值的对象并将其添加到新的数组属性中

Javascript 查找具有相同属性值的对象并将其添加到新的数组属性中,javascript,arrays,filtering,Javascript,Arrays,Filtering,我有一个数组,其中的对象具有名为“operationGroup”的对象属性和“groupId”属性,如下所示: [{ operation: 11111, operationGroup: null }, { operation: 22222, operationGroup: { groupId: 20 } }, { operation: 33333, operationGroup: { groupId:

我有一个数组,其中的对象具有名为“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,则不应添加数组属性。预期输出如下:

[{
行动:11111,
operationGroup:空
},
{
行动:22222,
操作组:{
组ID:20
},
分组操作:[{
行动:22222,
操作组:{
组ID:20
},
{
营运电话:44444,
操作组:{
组ID:20
}
}
}]
},
{
行动:33333,
操作组:{
groupId:1
}
},
{
营运电话:44444,
操作组:{
组ID:20
},
分组操作:[{
营运电话:44444,
操作组:{
组ID:20
}
},
{
行动:22222,
操作组:{
组ID:20
},
}
]
}
]
let-reqArray=[{
行动:11111,
operationGroup:空
},
{
行动:22222,
操作组:{
组ID:20
}
},
{
行动:33333,
操作组:{
groupId:1
}
},
{
营运电话:44444,
操作组:{
组ID:20
}
}
]
设组={}
让groupReq=[]
for(reqArray的let req){
如果(!req.operationGroup)继续;
如果(!groups[req.operationGroup.groupId])组[req.operationGroup.groupId]=[];
组[req.operationGroup.groupId].push(req)
}
for(reqArray的let req){
if(req.operationGroup&&groups[req.operationGroup.groupId]。长度>=2){
req.groupedOperations=组[req.operationGroup.groupId]
}
groupReq.push(请求)
}
console.log(groupReq,groups)
let-reqArray=[{
行动:11111,
operationGroup:空
},
{
行动:22222,
操作组:{
组ID:20
}
},
{
行动:33333,
操作组:{
groupId:1
}
},
{
营运电话:44444,
操作组:{
组ID:20
}
}
]
设组={}
让groupReq=[]
for(reqArray的let req){
如果(!req.operationGroup)继续;
如果(!groups[req.operationGroup.groupId])组[req.operationGroup.groupId]=[];
组[req.operationGroup.groupId].push(req)
}
for(reqArray的let req){
if(req.operationGroup&&groups[req.operationGroup.groupId]。长度>=2){
req.groupedOperations=组[req.operationGroup.groupId]
}
groupReq.push(请求)
}

console.log(groupReq,groups)
当“groupId”:1?时,为什么在预期输出中没有“groupedOperations”键。这是故意的还是错误的如果数组只有一个对象具有相同的groupId,则不应添加属性groupedOperations请提问以显示您所做的任何研究以及基于该研究所做的任何尝试。例如,关于数组分组有很多问题,包括或尝试自己解决。查看
array.reduce
array.forEach
。您可以就Stackoverflow提出更具体的问题,但它不是为您解决问题的论坛。当“groupId”:1?时,为什么您的预期输出中没有“groupedOperations”键。这是故意的还是错误的如果数组只有一个对象具有相同的groupId,则不应添加属性groupedOperations请提问以显示您所做的任何研究以及基于该研究所做的任何尝试。例如,关于数组分组有很多问题,包括或尝试自己解决。查看
array.reduce
array.forEach
。您可以就Stackoverflow提出更具体的问题,但它不是为您解决问题的论坛。
var list = [{
    operation: 11111,
    operationGroup: null
  },
  {
    operation: 22222,
    operationGroup: {
      groupId: 20
    }
  },
  {
    operation: 33333,
    operationGroup: {
      groupId: 1
    }
  },
  {
    operation: 44444,
    operationGroup: {
      groupId: 20
    }
  }
];

var groupedById =  list.reduce((acc, x) =>  { 
    if(x.operationGroup != null) {
        let groupId = x.operationGroup.groupId; 
        if(!acc[groupId]){
        acc[groupId] = [];
        }
        acc[groupId].push(x); 
    }
    return acc;
}, {});



list.map(x => {
    if(x.operationGroup != null) {
        let groupId = x.operationGroup.groupId;
        if(groupedById[groupId] && groupedById[groupId].length > 1){            
             x["groupedOperations"] = groupedById[groupId];          
        }
    }
});

console.log(list);