如何使用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
相关产品推荐
相关产品推荐

