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

如何使用JavaScript或Lodash移除嵌套对象数组中的重复描述项

嵌套数组重复字符串去重实现

实现逻辑

  • 按类型键的默认遍历顺序(示例中为typeA → typeB → typeC)保留首次出现的字符串,其余数组中的重复值直接移除
  • 使用Set存储已出现的字符串,判断效率更高
  • 支持批量处理多个主机节点的所有类型分组

原生JavaScript实现

function deduplicateDescriptions(data) {
  const seenStr = new Set();
  // 遍历所有主机节点
  for (const hostKey in data) {
    const typeGroups = data[hostKey];
    // 按顺序遍历每个类型对应的数组
    for (const typeKey in typeGroups) {
      // 过滤掉已出现过的字符串,同时更新已出现集合
      typeGroups[typeKey] = typeGroups[typeKey].filter(str => {
        if (seenStr.has(str)) return false;
        seenStr.add(str);
        return true;
      })
    }
  }
  return data;
}

// 调用方法
const processedData = deduplicateDescriptions(data);

处理后输出结果:

{
  "hostname": {
    "typeA": [
      "string 1 - 111",
      "string 2 - 222",
      "string 3 - 333"
    ],
    "typeB": [
      "string 4 - 444",
      "string 5 - 555"
    ],
    "typeC": [
      "string 6 - 666"
    ]
  }
}

Lodash实现

如果项目中已经引入Lodash,可以用更简洁的写法:

const _ = require('lodash');

function deduplicateWithLodash(data) {
  const seenStr = new Set();
  return _.mapValues(data, typeGroups => {
    return _.mapValues(typeGroups, strList => {
      return _.filter(strList, str => {
        if (seenStr.has(str)) return false;
        seenStr.add(str);
        return true;
      })
    })
  })
}

优先级调整说明

如果需要调整重复值的留存优先级,比如让typeC的数组优先保留重复值,只需调整类型分组的遍历顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:02