本文主要介绍,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]
求差集
- 求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]
- 求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]
The Posts
- Markdown与html互转markdown.js_showdown.js_marked.js_turndown.jsApr 5, 2022
- ES11新特性_matchAll_私有属性_allSettled_可选链操作符_动态import导入_BigInt_globalThis对象Mar 24, 2022
- ES9_rest参数与es9_spread扩展运算符Mar 23, 2022
- ES6新特性_模块化(module)Mar 17, 2022
- ES6新特性_number数值扩展与object对象方法扩展Mar 16, 2022
- Angular12中使用wow.js页面滚动动画效果Mar 15, 2022
- ES6新特性_class类声明继承constructor,super,static,set,get详细介绍Mar 12, 2022
- ES6新特性_Map用法和使用场景size,get,set,has,clear,deleteMar 12, 2022
- ES6新特性_集合(set)Mar 10, 2022
- ES6新特性_Promise介绍与基本使用Mar 10, 2022
- ES6新特性_生成器函数Mar 9, 2022
- ES6新特性_迭代器Mar 9, 2022
- ES6新特性_Symbol基本使用Mar 9, 2022
- ES6新特性_扩展运算符Mar 9, 2022
- ES6新特性_rest参数Mar 8, 2022
- ES6新特性_函数参数的默认值Mar 8, 2022
- ES6新特性_箭头函数Mar 8, 2022
- ES6新特性_简化对象的写法Mar 8, 2022
- ES6新特性_模板字符串Mar 8, 2022
- ES6新特性_变量的解构赋值Mar 8, 2022