SET
ES6 提供了新的数据结构set(集合)。集合类似于数组,但成员的值都是唯一的,集合实现 iterator 接口,所以可以使用“扩展运算符”和“for ... of”进行遍历,集合的属性和方法:
size : 返回集合的元素个数;
add:增加一个新元素,返回当前集合;
delete:删除元素,返回 boolean 值;
has : 检测集合中是否包含某个元素,还回 boolean 值;
clear: 清空集合;
声明一个集合:
let s = new Set();
console.log(s,typeof(s));
set 里面可以放一个可迭代的数据,一般是数组:
let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿','大事儿']);
console.log(s2,typeof(s2));
自动去重了,返回类型:object 。
元素个数:size
console.log(s2.size); // 4
数组里是 arr.length ;
添加元素:add
s2.add("喜事儿");
console.log(s2,s2.size);
数组里是 arr.push();
删除元素:delete
删除集合里的元素,返回 boolean;
s2.delete("坏事儿");
console.log(s2);
检查元素:has
has 本身是 have 的第三人称单数:返回 boolean;
console.log(s2.has("好事儿")); // true
清空集合:clear
清空集合,返回 undefined ;
s2.clear()
console.log(s2);
遍历集合:for ... of
集合有 iterator 接口,可以合作 for ... of 遍历:
for(v of s2){
console.log(v);
}
练习
练习1:数组去重
数组去重,产生新的数组;
let arr = [1,2,3,4,5,6,5,4,3,2,1];
let result = [... new Set(arr)];
console.log(result); // [1,2,3,4,5,6]
先把数组放在集合里面去重,再用扩展运算符把集合展开放在数组里,一行搞定;
练习2:交集
两个数组都有的元素,提出来;
let arr1 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
let arr2 = [3, 4, 6, 3, 2, 9, 7];
let result = [...new Set(arr1)].filter(item => new Set(arr2).has(item));
console.log(result); // [2, 3, 4, 6]
练习3:并集
两个数组组合起来,去重;
let arr1 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
let arr2 = [3, 4, 6, 3, 2, 9, 7];
let result = [... new Set([...arr1,...arr2])];
console.log(result); // [1, 2, 3, 4, 5, 6, 9, 7]
练习4:差集
把两个数组不相同的选出不放在一个数组里;谁是主体,结果不一样,就得有个先后顺序了;
let arr1 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
let arr2 = [3, 4, 6, 3, 2, 9, 7];
let result=[...new Set(arr1)].filter(item => !new Set(arr2).has(item));
console.log(result); // [1, 5]
arr1 里有,但 arr2 里没有的;或者反过来: arr2 里有的 arr1 里没有的,写法就调换过来;