ES6新特性_集合(set)

ES6新特性_集合(set)

本文主要介绍,ES6新特性_集合(set),Set本身是一个构造函数,可以用来生成Set数据结构。
Set的基本使用
1.声明一个Set
let s = new Set();
// 类型
console.log(typeof s2); // object

2.元素个数
let s2 = new Set(\[1,2,3,4,5,6,6\]);
// 元素个数
console.log(s2.size); // 6

3.添加元素
s2.add(7); console.log(s2); // 1,2,3,4,5,6,7

4.删除元素
s2.delete(4); console.log(s2); // 1,2,3,5,6,7

5.检测
console.log(s2.has(3)); // true

6.清空
s2.clear(); console.log(s2); // Set(0) {size: 0}

7.遍历
// 遍历, 1,2,3,4,5,6,7
for(let v of s2){
    console.log(v);
}
Set 实践1 数组去重
let arr = [1,2,3,4,5,6,6];
let s3 = [...new Set(arr)];
console.log(s3); // [1,2,3,4,5,6]
Set 实践2 数组中的对象去重

由于数组中里面是对象,所以我们要称用map和JSON.stringify转换成string类型 然后就可以使用new Set对这个数组去重,再转换为真正的数组,然后再使用map和JSON.parse还原对象

let arr2 = [
    {"name":"张三", age: 22},
    {"name":"李四", age: 20},
    {"name":"张三", age: 22}
];

1.使用map和JSON.stringify转换成string类型
arr2 = arr2.map(item=>JSON.stringify(item));
console.log(arr2);
// ['{"name":"张三","age":22}', '{"name":"李四","age":20}', '{"name":"张三","age":22}']

2.使用new Set去重
arr2 = [...new Set(arr2)];
console.log(arr2);
// ['{"name":"张三","age":22}', '{"name":"李四","age":20}']

3.还原数组里的对象
arr2 = arr2.map(item=>JSON.parse(item));
console.log(arr2); // [{…}, {…}]


// 以上的三个步骤我们只需要一行就可以搞定
arr2 = [...new Set(arr2.map(item=>JSON.stringify(item)))].map(item=>JSON.parse(item));
console.log(arr2); // [{…}, {…}]
求交集

在arr3上使用filter遍历,其中new Set(arr4)是把数组转换成集合,然后使用集合的has来判断是否有存在某个值

let arr3 = new Set([1,2,3]);
let arr4 = new Set([1,2,4]);
let res = [...arr3].filter(item=> arr4.has(item))
console.log('交集:', res); // [1, 2]
求并集,利用集合去重的特点求出并集

拆解下面的代码

let arr3 = new Set([1,2,3]);
let arr4 = new Set([1,2,4]);

1.  [...arr3,...arr4] <-- 合并数组
2.  new Set([...arr3,...arr4]) <-- 转换成集合
3.  [...] <--把集合转换成数组

let union = [...new Set([...arr3,...arr4])];
console.log('并集:',union); //  [1, 2, 3, 4]
求差集
  1. 求arr3在arr4中的差集
let arr3 = new Set([1,2,3]);
let arr4 = new Set([1,2,4]);

let diff =  [...arr3].filter(item => !arr4.has(item));
console.log('差集:',diff); // [3]
  1. 求arr4在arr3中的差集
let arr3 = new Set([1,2,3]);
let arr4 = new Set([1,2,4]);
let diff2 =  [...arr4].filter(item => !arr3.has(item));
console.log('差集2:',diff2); // [4]
Loading...