SET

ES6 提供了新的数据结构set(集合)。集合类似于数组,但成员的值都是唯一的,集合实现 iterator 接口,所以可以使用“扩展运算符”和“for ... of”进行遍历,集合的属性和方法:

size : 返回集合的元素个数;

add:增加一个新元素,返回当前集合;

delete:删除元素,返回 boolean 值;

has : 检测集合中是否包含某个元素,还回 boolean 值;

clear: 清空集合;

声明一个集合:

let s = new Set(); 
console.log(s,typeof(s));

Javascript(笔记39) - ES6特性 - 集合Set_ES6

set 里面可以放一个可迭代的数据,一般是数组:

let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿','大事儿']);
console.log(s2,typeof(s2));

Javascript(笔记39) - ES6特性 - 集合Set_数组_02

自动去重了,返回类型:object 。 


元素个数:size

console.log(s2.size);   // 4

数组里是 arr.length ; 


添加元素:add

s2.add("喜事儿");
console.log(s2,s2.size);

Javascript(笔记39) - ES6特性 - 集合Set_Javascipt_03

数组里是  arr.push();


删除元素:delete

删除集合里的元素,返回 boolean;

s2.delete("坏事儿");
console.log(s2);

Javascript(笔记39) - ES6特性 - 集合Set_Set_04

检查元素:has

has 本身是 have 的第三人称单数:返回 boolean;

console.log(s2.has("好事儿"));    // true


清空集合:clear

清空集合,返回 undefined ; 

s2.clear()
console.log(s2);

Javascript(笔记39) - ES6特性 - 集合Set_Javascipt_05

遍历集合:for ... of

集合有 iterator 接口,可以合作 for ... of 遍历:

for(v of s2){
console.log(v);
}

Javascript(笔记39) - ES6特性 - 集合Set_Javascipt_06


练习

练习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 里没有的,写法就调换过来;