ES6 提供了新的数据结构 Set。
特性
似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。
我们可以利用这一唯一特性进行数组的去重工作。
单一数组的去重。
-
let set6 = new Set([1, 2, 2, 3, 4, 3, 5])
-
console.log('distinct 1:', set6)
点击(此处)折叠或打开
输出的结果:distinct 1: Set { 1, 2, 3, 4, 5 }
多数组的合并去重
-
let arr1 = [1, 2, 3, 4]
-
let arr2 = [2, 3, 4, 5, 6]
-
let set7 = new Set([...arr1, ...arr2])
-
console.log('distinct 2:', set7)
点击(此处)折叠或打开
输出的结果:distinct 2: Set { 1, 2, 3, 4, 5, 6 }
操作
1.向Set中添加元素。
-
let set1 = new Set()
-
set1.add(1)
-
set1.add(2)
-
set1.add(3)
-
console.log('added:', set1)
点击(此处)折叠或打开
输出的结果:added: Set { 1, 2, 3 }
2.从Set中删除元素。
-
let set1 = new Set()
-
set1.add(1)
-
set1.add(2)
-
set1.add(3)
-
set1.delete(1)
-
console.log('deleted:', set1)
点击(此处)折叠或打开
输出的结果:deleted: Set { 2, 3 }
3.判断某元素是否存在。
-
let set1 = new Set()
-
set1.add(1)
-
set1.add(2)
-
set1.add(3)
-
set1.delete(1)
-
console.log('has(1):', set1.has(1))
-
console.log('has(2):', set1.has(2))
点击(此处)折叠或打开
输出的结果:has(1): false
输出的结果:has(2): true
4.清除所有元素。
-
let set1 = new Set()
-
set1.add(1)
-
set1.add(2)
-
set1.add(3)
-
set1.clear()
-
console.log('cleared:', set1)
点击(此处)折叠或打开
输出的结果:cleared: Set {}
Set和Array互转
1.数组转Set
-
array to set 2: Set { 4, 5, 6 }
-
array to set 3: Set { 7, 8, 9 }
-
let set2 = new Set([4,5,6])
-
console.log('array to set 1:', set2)
-
-
let set3 = new Set(new Array(7, 8, 9))
-
console.log('array to set 2:', set3)
2.Set转数组
-
let set4 = new Set([4, 5, 6])
-
console.log('set to array 1:', [...set4])
-
console.log('set to array 2:', Array.from(set4))
-
输出的结果:set to array 1: [ 4, 5, 6 ]
-
输出的结果:set to array 2: [ 4, 5, 6 ]
遍历
可以使用Set实例对象的keys(),values(),entries()方法进行遍历。
由于Set的键名和键值是同一个值,它的每一个元素的key和value是相同的,所有keys()和values()的返回值是相同的,entries()返回的元素中的key和value是相同的。
-
let set5 = new Set([4, 5, 'hello'])
-
console.log('iterate useing Set.keys()')
-
for(let item of set5.keys()) {
-
console.log(item)
-
}
-
-
console.log('iterate useing Set.values()')
-
for(let item of set5.values()) {
-
console.log(item)
-
}
-
-
console.log('iterate useing Set.entries()')
-
for(let item of set5.entries()) {
-
console.log(item)
-
}
-
iterate useing Set.keys()
-
4
-
5
-
hello
-
-
iterate useing Set.values()
-
4
-
5
-
hello
-
-
iterate useing Set.entries()
-
[ 4, 4 ]
-
[ 5, 5 ]
-
[ 'hello', 'hello' ]
其他特性
在向Set加入值时,Set不会转换数据类型,内部在判断元素是否存在时用的类似于精确等于(===)的方法,“2”和2是不同的,NaN等于其自身。
-
let set8 = new Set()
-
set8.add(NaN)
-
set8.add(NaN)
-
console.log('NaN===Nan is true:', set8)
-
输出的结果:NaN===Nan is true: Set { NaN }
阅读(1138) | 评论(0) | 转发(0) |