set 以及weakSet用法

一、set的用法

set元素只能是数组,不能是对象,并且支持定义的时候直接赋值
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
// 1.set定义
let setArr = new Set(['amy','ye']);
console.log(setArr) //et(2) {"amy", "ye"}
[...setArr ]//["amy", "ye"]

// 2.添加元素
setArr.add('123')
console.log(setArr)  //Set(3) {"amy", "ye", "123"},如果添加数组里面有的元素,不添加

// 3.删除指定元素
setArr.delete('123')
console.log(setArr)//Set(2) {"amy", "ye"}

// 4.清除所有元素
setArr.clear()
console.log(setArr)//Set(0) {}   删除所有

// 5.获取元素的个数
console.log(setArr.size)//2

//6.判断是含有某个元素
console.log(setArr.has('amy'))/true

7.利用set 对数组去重
let array = [1,2,3,1,2] // 数组去重
console.log([...new Set(array)])//[1, 2, 3]

8.字符串去重
console.log([...new Set('ababbc')].join(''))//

9.NaN 相等
let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
console.log(set)// Set {NaN}


keys方法、values方法、entries方法返回的都是遍历器对象(详见
《Iterator 对象》一章)。由于 Set 结构没有键名,只有键值(或者说键
名和键值是同一个值),所以keys方法和values方法的行为完全一致。

10.keys()遍历
// keys() 返回键名
for(let item of setArr.keys()){
    console.log(item)
}
// amy
// ye

11.values()遍历
// 返回值
for(let item of setArr.values()){
    console.log(item)
}
// amy
// ye

12.entries遍历
for(let item of setArr.entries()){
    console.log(item)
}
//["amy", "amy"]
//["ye", "ye"]

二、weakSet的用法

weakSet的元素可以是对象,不支持定义的的时候直接赋值

1.weakSet定义
let weakObj = new WeakSet({a:1111})
console.log(weakObj)  // 这样直接赋值会报错
// object is not iterable (cannot read property Symbol(Symbol.iterator))
// at new WeakSet ()
// // at index.js:658

正确的用法:
let weakObj = new WeakSet()
let obj = {a:123}
weakObj.add(obj)
console.log(weakObj)  

注意:
let weakObj = new WeakSet()
let obj = {a:123}
let obj1 = {a:123}
weakObj.add(obj)
weakObj.add(obj1)
console.log(weakObj)  //

WeakSet {{…}, {…}}

你可能感兴趣的:(set 以及weakSet用法)