如何避免按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
相关产品推荐
相关产品推荐

