You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript按operationGroup.groupId为同组对象添加groupedOperations属性

实现方法

整个处理流程不需要额外依赖,仅通过两次遍历即可完成,完全匹配你提出的判定规则:

  • 第一次遍历原始数组,建立groupId到同组所有对象的映射表,自动跳过operationGroup为null的对象
  • 第二次遍历原始数组,按规则为每个对象判断是否需要新增属性:
    • 若对象operationGroup为null,不对其做任何修改
    • 若该对象对应的groupId在映射表中仅关联1个对象(即全数组仅出现1次),不对其做任何修改
    • 仅当同组对象数量≥2时,才为当前对象新增groupedOperations属性,属性值为对应组的全部对象数组

完整可运行代码

const originalList = [
  {
    operation: 11111,
    operationGroup: null
  },
  {
    operation: 22222,
    operationGroup: {
      groupId: 20
    }
  },
  {
    operation: 33333,
    operationGroup: {
      groupId: 1
    }
  },
  {
    operation: 44444,
    operationGroup: {
      groupId: 20
    }
  }
];

// 构建groupId与同组对象的映射
const groupStore = {};
originalList.forEach(item => {
  if (!item.operationGroup) return;
  const gid = item.operationGroup.groupId;
  groupStore[gid] = groupStore[gid] || [];
  groupStore[gid].push(item);
});

// 按规则生成最终结果
const finalResult = originalList.map(item => {
  if (!item.operationGroup) return item;
  const gid = item.operationGroup.groupId;
  const sameGroupItems = groupStore[gid];
  // 单元素分组不新增groupedOperations属性
  if (sameGroupItems.length === 1) return item;
  return {
    ...item,
    groupedOperations: sameGroupItems
  };
});

结果说明

代码输出完全符合规则要求:

  1. operation:11111的对象因operationGroup为null,保持原结构无新增属性
  2. operation:33333的对象对应groupId=1,全数组仅出现1次,保持原结构无新增属性
  3. 两个对应groupId=20的对象,均会携带groupedOperations数组,数组内存储同组的全部两个对象
    注:你提供的预期输出示例中存在对象括号闭合不匹配的语法错误,上述代码会输出语法完全合法的结构

内容的提问来源于stack exchange,提问作者Gabriel Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 23:54:03