Set数据类型 & WeakSet数据类型

数组去重

在Es6中,给我们提供了Set()函数,可以通过这个函数来实现数组去重.

let arr = [1,3,5,7,3,2]
let setArr = new Set(arr)
console.log(setArr) // Set {1, 3, 5, 7, 2} 

输出后我们发现打印的setArr是一个对象的形式,同时已经把传入的数组中重复的3已经实现去重了.

add() 为数组添加一个元素

通过实例化的Set对象,我们可以通过add()方法进行添加元素.这个时候我们需要注意的是,如果添加了Set()对象中已经有的值,依然还是会被去重的,只有添加了不同的值,才会被正确添加.

let arr = ['beline', 'tang']
let setArr = new Set(arr)
setArr.add(9)
console.log(setArr) // Set {"beline", "tang", 9} (3)

has() 查找

通过实例化对象调用has()方法可以查找Set()实例化对象中是否有对应的元素,返回值是一个布尔类型

let arr = ['beline', 'tang']
let setArr = new Set(arr)
console.log(setArr.has('tang')) // true

delete() 删除对应元素

通过实例化对象调用delete()方法,可以通过传入需要删除的内容,进行对应的元素删除.

let arr = ['beline', 'tang']
let setArr = new Set(arr)
setArr.delete('tang')
console.log(setArr)  // Set {"beline"} (1)

clear() 清空Set对象的所有内容

通过实例化对象调用clear()方法可以清空Set()实例化对象的所有内容

let arr = ['beline', 'tang']
let setArr = new Set(arr)
setArr.clear()
console.log(setArr) // Set {} (0)

Set实例化对象 遍历内容

1.for...of

这种遍历方法也没什么可讲的,都是固定格式,直接看代码

let arr = ['beline', 'tang', '学习', 'ES6']
let setArr = new Set(arr)
for( let val of setArr ) {
  console.log(val) // beline tang 学习 ES6
}
2. forEach
let arr = ['beline', 'tang', '学习', 'ES6']
let setArr = new Set(arr)

setArr.forEach(val => {
  console.log(val) // beline tang 学习 ES6
})

size属性 同等数组的length 获取里面值的个数

set实例化对象为我们提供了size属性,同等数组的lenth属性,获取set实例对象中的值的个数,这里我们用于演示的数组的值都是不同的,返回值为4,如果数组中有重复的值,返回值将是去重之后的个数.

let arr = ['beline', 'tang', '学习', 'ES6']
let setArr = new Set(arr)
console.log(setArr.size)  // 4

WeakSet()

由于Set()只能传入数组,因此ES6为我们提供了WeackSet()方法用于处理对象.但WeakSet()直接使用并传入对象的话,页面会报错

let weakObj = new WeakSet({a: 123})  // TypeError: Type error

正确的应该是先声明对象,然后使用add()方法进行添加

let weakObj = new WeakSet()
let beline = {a:123, name: 'beline', last: 'tang'}
weakObj.add(beline)
console.log(weakObj) // WeakSet {{a: 123, name: "beline", last: "tang"}} (1)

注意: 如果我们声明2个对象,内容的值一样,都addWeakSet实例化对象中,由于声明的2个对象虽然值一样,但是栈不同,打印的结果会把2个内容都打印出来,这个坑要注意一下.

let weakObj = new WeakSet()
let beline = {a:123, name: 'beline', last: 'tang'}
let beline1= {a:123, name: 'beline', last: 'tang'}
weakObj.add(beline)
weakObj.add(beline1)
console.log(weakObj) // WeakSet {{a: 123, name: "beline", last: "tang"}, {a: 123, name: "beline", last: "tang"}} (2)

根据这个特性,我们可以把beline赋值给beline1.再调用add方法,这样是栈相同的,打印weakObj.就不会出现2个对象被添加了.

let weakObj = new WeakSet()
let beline = {a:123, name: 'beline', last: 'tang'}
let beline1= beline
weakObj.add(beline)
weakObj.add(beline1)
console.log(weakObj) // WeakSet {{a: 123, name: "beline", last: "tang"}} (1)

你可能感兴趣的:(Set数据类型 & WeakSet数据类型)