ES6,新增數據結構Set的用法


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

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)

結果:

array to set 2: Set { 4, 5, 6 }
array to set 3: Set { 7, 8, 9 }

 

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 }

 

End

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM