new Set()的基础用法(ES6)——类似数组、成员唯一用于数组去重 & set对象方法-增add删delete查has和遍历 & 应用之数组去重、字符串去重、实现不同set对象的并集、交集和差集

new Set()的基础用法(ES6)——类似数组、成员唯一用于数组去重 & set对象方法-增add删delete查has和遍历 & 应用之数组去重、字符串去重、实现不同set对象的并集、交集和差集

1、什么是Set()
1.1、基本介绍

Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合。

Set本身是一个构造函数,用来生成 Set 数据结构

使用Set数据结构去除重复对象:new Set(strings)进行转型。因为Set数据结构并非真正的数组,它类似于数组,并且成员值都是唯一的,没有重复,所以可以用来做去重操作。

  • 但是因为它是一个类似数组结构,所以需要转型为真正的数组去使用。所以需要用Array.from。
// new Set()里面需要接的是strings类型
 const list =[" { name: '张三', age: 18, address: '北京' }"," { name: '张三', age: 18, address: '北京' }"]
 
 console.log('去重',new Set(list))//{" { name: '张三', age: 18, address: '北京' }"}
  • 注:如果里面不是一个string类型,而是对象不会去重:
const list =[{ name: '张三', age: 18, address: '北京' },{ name: '张三', age: 18, address: '北京' }]
console.log('去重',new Set(list))
1.2、解决方案
const list =[
    { name: "张三", age: 18, address: "北京" },
    { name: "李四", age: 20, address: "天津" },
    { name: "张三", age: 18, address: "北京" },
]

其中,张三和李四为重复对象;
场景:使用Set数据结构去除重复对象
解析:因为数组里面是对象,所以我们这边先用map用JSON.stringify进行转化成string类型

const strings = list.map((item) => JSON.stringify(item))
console.log('strings', strings) //['{"name":"张三","age":18,"address":"北京"}', '{"name":"李四","age":20,"address":"天津"}', '{"name":"张三","age":18,"address":"北京"}']

然后,就可以用new Set对这个数组进行去重,然后再用Array.from转化为真正的数组,

打印出来这就已经去重了

const removeDupList = Array.from(new Set(strings))
console.log('removeDupList',removeDupList)//['{"name":"张三","age":18,"address":"北京"}', '{"name":"李四","age":20,"address":"天津"}']

然后,再把数组里面的字符串类型转化为对象类型:

const removeDupList = Array.from(new Set(strings))
const result = removeDupList.map((item) => JSON.parse(item))
console.log('result',typeof result)  // // [{name: '张三', age: 18, address: '北京'}, {name: '李四', age: 20, address: '天津'}]

汇总如下:

const list =[
    { name: "张三", age: 18, address: "北京" },
    { name: "李四", age: 20, address: "天津" },
    { name: "张三", age: 18, address: "北京" },
]
 
const strings = list.map((item) => JSON.stringify(item)) // 1、转化成string类型
const removeDupList = Array.from(new Set(strings))  // 2、转化为真正的数组
const result = removeDupList.map((item) => JSON.parse(item)) // 3、字符串类型转化为对象类型
console.log('数组去重',result)  // [{name: '张三', age: 18, address: '北京'}, {name: '李四', age: 20, address: '天津'}]
1.3、Set 对象方法
方法描述
add添加某个值,返回Set对象本身。
clear删除所有的键/值对,没有返回值。
delete删除某个键,返回true。如果删除失败,返回false。
forEach对每个元素执行指定操作。
has返回一个布尔值,表示某个键是否在当前 Set 对象之中。
2、增删改查方法
2.1 添加元素add

添加某个值,返回 Set 结构本身,当添加实例中已经存在的元素,set不会进行处理添加

let list=new Set();
list.add(1)
list.add(2).add(3).add(3)   //  Set(3) {1, 2, 3}    3只被添加了一次
2.2 删除元素 delete

删除某个值,返回一个布尔值,表示删除是否成功

let list=new Set([1,20,30,40])
list.delete(30)      //删除值为30的元素,这里的30并非下标
console.log(list)  // Set(3) {1, 20, 40}
2.3 判断某元素是否存在has

返回一个布尔值,判断该值是否为Set的成员

let list=new Set([1,2,3,4])
console.log(list.has(2)) //true
2.4 清除所有元素clear

清除所有成员,没有返回值

let list=new Set([1,2,3,4])
list.clear()
console.log(list)   // Set(0) {size: 0}
3、遍历方法
3.1 遍历 keys()

返回键名的遍历器,相等于返回键值遍历器values()

let list = new Set(['a','b','c'])
for(let key of list.keys()){
   console.log(key)  //  'a','b','c'
}
3.2 遍历 values()

返回键值的遍历器

let list = new Set(['a','b','c'])
for(let value of list.values()){
  console.log(value)  //  'a','b','c'
}
3.3 遍历 entries()

返回键值对的遍历器

let list = new Set(['4','5','hello'])
for (let item of list.entries()) {
  console.log(item); // ['4','4']   ['5','5']   ['hello','hello'] 
}
3.4 遍历 forEach()

使用回调函数遍历每个成员

let list = new Set(['4','5','hello'])
list.forEach((value, key) => console.log(key + ' : ' + value)) // 4:4    5:5   hello:hello
4、使用情形
4.1 用于数组去重

实例

var arr = [1,2,3,3,1,4];
[...new Set(arr)]; // [1, 2, 3, 4]
Array.from(new Set(arr)); // [1, 2, 3, 4]

[...new Set('ababbc')].join(''); // "abc" 字符串去重
new Set('ice doughnut'); //Set(11) {"i", "c", "e", " ", "d", …}

示例

let arr = [3, 5, 2, 2, 5, 5];
let setArr = new Set(arr)  

console.log(setArr);  // 返回set数据结构  Set(3) {3, 5, 2}
//方法一   es6的...解构
let unique1 =  [...setArr ];    
console.log(unique1);    //去重转数组后  [3,5,2]

//方法二  Array.from()解析类数组为数组
let unique2 = Array.from(setArr ) 
console.log(unique2);   //去重转数组后  [3,5,2]
4.2 用于字符串去重
let str = "352255";
let unique = [...new Set(str)].join("");  
console.log(unique);  // 352 
4.3 实现并集、交集和差集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
console.log(union);  // Set(4) {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
console.log(intersect); // Set(2) {2, 3}

// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
console.log(difference); // Set(1) {1}
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值