set详解

ES6 提供了新的数据结构 Set

它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

s.add(x)                    //1.增加 不会增加重复的值

s.size                         // 2. 长度

s. delete(value)           // 3. 删除

s.has(value)               // 4.是否包含

s.clear()                  // 5. 清除所有成员


for (let i of s) {
  console.log(i);
}                              //可以用let of 循环

const set = new Set([1, 2, 3, 4, 4]);
[...set]                        // 转化为数组
// [1, 2, 3, 4]              //可以接收一个数组去重 (或者类数组)

[...new Set(array)]        //去除数组重复成员

[...new Set('ababbc')].join('')
// "abc"                         //去除字符串重复成员

遍历操作 (set的key = value)

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员
可以用let of 循环
而且,数组的mapfilter方法也可以间接用于 Set 了
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set结构:{2, 4, 6}

let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// 返回Set结构:{2, 4}

因此使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

 

posted @ 2020-03-29 13:59  容忍君  阅读(686)  评论(0)    收藏  举报