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

如何去除嵌套对象数组重复项 保留每个field下首个key条目

嵌套结构对象数组去重实现方案

去重规则:按field字段分组,每组内value对象下的每个键仅保留第一次出现的条目,后续重复键对应的条目直接过滤

实现思路

  • 遍历原数组时,用Set结构记录已经留存过的「field值 + value下的键名」组合,避免重复留存
  • 示例数据中每个条目的value对象仅包含1个键,直接通过Object.keys(item.value)[0]即可获取当前条目的value键名
  • 遍历过程中如果当前条目的组合未被记录,就保留该条目并将组合加入Set;如果已被记录则过滤掉该条目

可运行代码

// 原始数组(已修正原数据里的中文引号为标准英文引号,保证语法可执行)
const rawList = [
  {
    field: 'A',
    value: {
      key_A: ['ajd', 'ajd', 'kajd'],
    },
  },
  {
    field: 'A',
    value: {
      key_B: ['123', '4', '45', '94'],
    },
  },
  {
    field: 'A',
    value: {
      key_A: ['ajd', 'ajd', ''],
    },
  },
  {
    field: 'A',
    value: {
      key_B: ['123', '4', '45'],
    },
  },
  {
    field: 'Z',
    value: {
      key_A: ['ajdm', 'askjd', 'kajd'],
    },
  },
  {
    field: 'Z',
    value: {
      key_B: ['13', '123', '1823'],
    },
  },
  {
    field: 'Z',
    value: {
      key_A: ['ajdm', 'askjd', ''],
    },
  },
  {
    field: 'Z',
    value: {
      key_B: ['13', '123', ''],
    },
  },
];

// 核心去重逻辑
const existedKeys = new Set();
const dedupedList = rawList.filter(item => {
  const valueKey = Object.keys(item.value)[0];
  // 加分隔符避免field和valueKey拼接时出现字符串冲突导致误判
  const uniqueMark = `${item.field}__${valueKey}`;
  if (!existedKeys.has(uniqueMark)) {
    existedKeys.add(uniqueMark);
    return true;
  }
  return false;
});

运行结果

执行代码后得到的输出和预期完全一致:

[
  { field: 'A', value: { key_A: ['ajd', 'ajd', 'kajd'] } },
  { field: 'A', value: { key_B: ['123', '4', '45', '94'] } },
  { field: 'Z', value: { key_A: ['ajdm', 'askjd', 'kajd'] } },
  { field: 'Z', value: { key_B: ['13', '123', '1823'] } }
]

补充说明

  • 采用Set做已存在记录的存储,查询和写入性能均为O(1),相比数组存储+includes判断的方案在数据量较大时性能优势明显
  • 生成唯一标识的分隔符可根据自身业务的字段命名规则调整,只要能避免拼接冲突即可
  • 如果实际业务中单个条目的value下存在多个键,只需将取单个valueKey的逻辑调整为遍历value的所有键,判断是否存在未留存的键即可,核心逻辑不变

内容的提问来源于stack exchange,提问作者Bishal Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:18:39