◆

数据结构集合详解:JavaScript Set 去重与交集

2023-02-08 12:540

什么是集合

  • 一种无序且唯一的数据结构
  • ES6 中有集合,名为 Set

集合的核心特性是元素唯一且不关心顺序,它擅长回答两类问题:「这个元素在不在里面」和「两组数据的交集、并集、差集是什么」。判断存在这件事,数组用 includes 是逐个比对的 O(n),Set 的 has 基于哈希,平均是 O(1)——数据量一大差距非常明显。

实际开发里最常用到的就是数组去重和两个列表求交集,比如比对权限 id、找出两次请求返回数据的差异。下面三段分别是这几种写法。

注意 Set 的去重规则是 SameValueZero:NaN 会被认为彼此相等(这点和 === 不同),但对象是按引用比较的,两个内容相同的字面量对象不会被去掉。

示例

new Set(arr) 建集合时自动丢掉重复项,再用扩展运算符展开回数组,这是最简洁的去重写法。has 直接查存在性。求交集的思路是把其中一个转成 Set,遍历另一个用 has 过滤——比双层循环从 O(n²) 降到 O(n)。

// 去重
const arr = [1, 1, 2, 2];
const arr2 = [...new Set(arr)];

// 判断元素是否在集合中
const set = new Set(arr);
const has = set.has(3);

// 求交集
const set2 = new Set([2, 3]);
const set3 = new Set([...set].filter(item => set2.has(item)));
💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVE数据结构集合详解:JavaScript Set 去重与交集加载中