如何从JSON对象数组提取去重的Domain和Manager字段生成两个数组
单次遍历提取去重Domain、Manager数组的实现方案
你当前的写法存在两个问题,一是需要遍历两次原数组,二是没有做去重处理,最终得到的数组会存在重复值。你可以通过单次遍历配合Set自动去重的特性实现需求,代码如下:
const domainSet = new Set<string>(); const managerSet = new Set<string>(); // 单次遍历完成两个字段的收集和去重 res.forEach(item => { domainSet.add(item.Domain); managerSet.add(item.Manager); }); // 转为数组格式 const Domains: string[] = Array.from(domainSet); const Managers: string[] = Array.from(managerSet);
该实现的优势:
- 仅对原数组做1次遍历,时间复杂度为O(n),数据量越大相比两次遍历的写法性能优势越明显
- 依托Set的元素唯一性特性自动完成去重,无需手动写判断逻辑,代码简洁易维护
如果你的运行环境不支持ES6的Set,也可以用数组判断的原生写法实现:
const Domains: string[] = []; const Managers: string[] = []; res.forEach(item => { if (!Domains.includes(item.Domain)) { Domains.push(item.Domain); } if (!Managers.includes(item.Manager)) { Managers.push(item.Manager); } });
该方案无需依赖ES6新特性,兼容性更强,适合需要兼容低版本运行环境的场景。小数据量下性能差异不大,数据量较大时性能会略低于Set方案。
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

