JavaScript中如何移除数组重复字符串并获取两数组差集?
嘿,这个需求很常见,我给你几种简单实用的实现方式,你可以根据自己的场景选择:
方法1:原生数组方法组合(直观易用)
适合元素数量不多的场景,用filter()配合includes()就能快速搞定:
const json1 = ["one","two"]; const json2 = ["one","two","three","four"]; // 过滤出json2中不在json1里的元素 const result = json2.filter(item => !json1.includes(item)); console.log(result); // 输出 ["three","four"]
原理很简单:filter()会遍历json2的每一个元素,includes()检查当前元素是否存在于json1中,取反后就留下了只在json2里出现的元素。
方法2:用Set优化性能(大数据量首选)
如果你的数组元素很多,includes()的时间复杂度是O(n),多次调用会拖慢速度。换成Set的has()方法(时间复杂度O(1))能大幅提升效率:
const json1 = ["one","two"]; const json2 = ["one","two","three","four"]; // 先把json1转成Set结构,方便快速查找 const json1Set = new Set(json1); const result = json2.filter(item => !json1Set.has(item)); console.log(result); // 输出 ["three","four"]
先将json1转换为Set集合,之后遍历json2时用has()判断元素是否存在,比includes()高效得多,大数据量场景下优势明显。
扩展:如果需要双向差集(可选)
要是之后你需要获取两个数组各自独有的元素(比如同时得到json1里没有的和json2里没有的),可以这么写:
const set1 = new Set(json1); const set2 = new Set(json2); const result = [ ...json1.filter(item => !set2.has(item)), ...json2.filter(item => !set1.has(item)) ];
不过针对你当前的需求,前面两种单向差集的方法就完全够用啦。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

