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

如何避免按language分组存储时添加重复的subItem?

按语言分组并去重的JavaScript解决方案

你的现有代码仅实现了按language字段分组,但没有处理重复项的逻辑——从提供的data来看,重复的subItem都是nid字段相同的,所以可以基于nid来判断是否已添加过。

方案一:用Set记录已存在的ID(性能更优)

通过一个对象存储每个语言分组下已添加的nid集合,利用Set的O(1)查找效率快速判断重复:

function groupAndDeduplicate(data) {
  const result = {};
  const existingNids = {};

  for (let item of data) {
    for (let subItem of item.itemsSlider) {
      const lang = subItem.language;
      const nid = subItem.nid;

      // 初始化语言分组和对应的ID记录集合
      if (!result[lang]) {
        result[lang] = [];
        existingNids[lang] = new Set();
      }

      // 未存在则添加
      if (!existingNids[lang].has(nid)) {
        existingNids[lang].add(nid);
        result[lang].push(subItem);
      }
    }
  }
  return result;
}

方案二:直接在数组中检查重复(实现更简洁)

如果数据量不大,也可以直接用Array.some()检查当前分组中是否已有相同nid的项:

function groupAndDeduplicate(data) {
  const result = {};

  for (let item of data) {
    for (let subItem of item.itemsSlider) {
      const lang = subItem.language;

      if (!result[lang]) {
        result[lang] = [];
      }

      // 检查是否存在重复nid
      const isDuplicate = result[lang].some(item => item.nid === subItem.nid);
      if (!isDuplicate) {
        result[lang].push(subItem);
      }
    }
  }
  return result;
}

验证效果

用你提供的data调用上述函数后:

  • fr_FR分组只会保留1个nid=61620的项
  • en_US分组不会重复添加nid=61626的项
  • es_MX分组不会重复添加nid=61626的项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:20:23