特性
似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。
我们可以利用这一唯一特性进行数组的去重工作。
单一数组的去重。
点击(此处)折叠或打开
- 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)
点击(此处)折叠或打开
- 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 }