首页 > 解决方案 > 查找具有相同属性值的对象并将它们添加到新的数组属性中

问题描述

我有一个包含对象的数组,这些对象具有一个名为“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
        },
      }
    ]
  }
]

标签: javascriptarraysfiltering

解决方案


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 属性


推荐阅读