数组去重
在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个对象,内容的值一样,都
add
到WeakSet
实例化对象中,由于声明的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)