Set
1.1基本用法
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数
,用来生成 Set 数据结构。set返回植是对象,所以一般会用 … 展开 再加上 [ ] 转成数组使用
去除数组
重复成员的方法
// 去除数组的重复成员
[...new Set(array)]
去除字符串
里面的重复字符
[...new Set('ababbc')].join('')
// "abc"
1.2遍历的应用
扩展运算符(…)内部使用for…of循环,所以也可以用于 Set 结构。
let set = new Set(['red', 'green', 'blue']);
let arr = [...set]; // ...set => red green blue 加上中括号放入数组
// ['red', 'green', 'blue']
扩展运算符和 Set 结构相结合,就可以去除数组的重复成员。
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
// [3, 5, 2]
数组的map和filter
方法也可以间接用于 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}
// 交集
//如果你需要一个返回值是数组 ,要先想到 filter方法
//交集 是一个新数组
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
let arr1 = [2, 2, 3, 4, 5, 7, 7];
let arr2 = [2, 3, 4, 5, 7, 9];
//如果你需要一个返回值是数组 ,要先想到 filter方法
//交集 是一个新数组
let newArr = [...new Set(arr1)].filter(function(item) {
//arr2 去重
let s2 = new Set(arr2);
if (s2.has(item)) {
return true;
} else {
return false;
}
})
console.log(newArr); // [2, 3, 4, 5, 7]
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}