初識了解ES6 Set

2021-10-07 05:56:50 字數 2170 閱讀 9934

es6 提供了新的資料結構 set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。

可以通過add()方法向 set 結構加入成員

const s =

newset()

;[2,

3,5,

4,5,

2,2]

.foreach

(x => s.

add(x));

for(

let i of s)

set函式可以接受乙個陣列(或者具有 iterable 介面的其他資料結構)作為引數,用來初始化。

(tip:為了統一集合型別,es6標準引入了新的iterable型別,array、map和set都屬於iterable型別具有iterable型別的集合可以通過新的

for……of迴圈來遍歷)

let

set=

newset([

1,3,

4,5,

6,6,

6,9,

71])console.

log(

set)

// 1,3,4,5,6,9,71

set.size // 7

因此我們是可以通過set來進行陣列去重的

// 去除陣列的重複成員

[...

newset

(array)

]// 也可以去除字串中重複字元

console.

log(

[...

newset

('1234443221ababbc')]

.join(''

))// 1234abc

// 但是對於相同的物件無法去重,只能用其他方法了

letset

=new

set([1

,,3,

4,5,

6,,6

,6,9

,7,,

])console.

log(

json

.stringify([

...set])

)// [1,,3,4,5,6,,9,7,{},{}]

向 set 加入值的時候,不會發生型別轉換,所以5和"5"是兩個不同的值。set 內部判斷兩個值是否不同,使用的演算法叫做「same-value-zero equality」,它類似於精確相等運算子(===),主要的區別是向 set 加入值時認為nan等於自身,而精確相等運算子認為nan不等於自身。

// 向 set 例項新增了兩次nan,但是只會加入乙個。這表明,在 set 內部,兩個nan是相等的。

letset

=new

set();

let a =

nan;

let b =

nan;

set.

add(a)

;set

.add

(b);

set// set

set使用的身份演算法類似於===運算子,不太適合比較物件,

console.

log(

===)

// false

console.

log(

===)

// false

//由於兩個空物件或者裡邊key,value 相同的物件不相等,所以它們被視為兩個值

letset

=new

set([1

,,3,

4,5,

6,,6

,6,9

,7,,

])console.

log(

json

.stringify([

...set])

)// [1,,3,4,5,6,,9,7,{},{}]

// 如果物件的址相同,依舊可以判斷

let a =

let b = a

letset=

newset([

1, b, a,,]

)console.

log(

json

.stringify([

...set])

)// [1,,{},{}]

ES6 Set基本用法

set基本用法 set 結構的例項有以下屬性。set.prototype.constructor 建構函式,預設就是set函式。set.prototype.size 返回set例項的成員總數。set 例項的方法分為兩大類 操作方法 用於運算元據 和遍歷方法 用於遍歷成員 下面先介紹四個操作方法。se...

ES6 set資料結構

set 本身是乙個建構函式,用來生成 set 資料結構。let set new set set 函式可以接受乙個陣列作為引數,用來初始化。但是成員中的值都是唯一的。沒有重複的值 let se new set let arr 2,3,4,5,6,2,3,4,5,6 arr.foreach item s...

ES6 Set資料結構

三 增刪改查 es6提供了新的資料結構set。它類似於陣列,但是成員的值都是唯的,沒有重複的值 set本身是乙個建構函式,用來生成set資料結構。set.prototype.size返回 set 物件中的值的個數 const s newset set函式可以接受乙個陣列作為引數,用來初始化 cons...