ES6新增資料型別Set Map

2021-10-16 13:25:38 字數 4217 閱讀 4871

map物件是用來儲存鍵值對的,它和object非常的相似,那麼他們之間存在著什麼樣的差異呢

map與object的區別

object的鍵只能是字串或者symbols,但是map的鍵可以是任意值

map中的鍵值是有序的(fifo原則),而物件中的鍵不是

map的鍵值對個數可以通過size屬性來獲取,而物件則需要通過手動計算

物件有自己的原型鏈,原型鏈上的鍵名可能和自己物件想的鍵名產生衝突

map中的鍵key

var mymap =

newmap()

//鍵var keystring =

'a string'

var keyobj =

varkeyfunc

=function()

//鍵值

mymap.

set(keystring,

"和鍵'a string'相關的鍵值"

) mymap.

set(keyobj,

) mymap.

set(keyfunc,()

=>

)console.

log(mymap.

get(keystring));

和鍵'a string'相關的鍵值

console.

log(mymap.

get(keyobj));

//console.

log(mymap.

get(keyfunc));

//()=>

console.

log(mymap)

;//map(3) => , ƒ => ƒ}

//[[entries]]

//0:

//1:

//2: => ()=>}

//size: (...)

//__proto__: map

在map物件的_proto_上含有的屬性

clear: ƒ clear()

constructor: ƒ map()

delete: ƒ delete()

entries: ƒ entries()

foreach: ƒ foreach()

get: ƒ ()

has: ƒ has()

keys: ƒ keys()

set: ƒ ()

size: (…)

values: *ƒ values()

map除了可以用foreach遍歷還可以通過for…of遍歷

map物件操作

1.map與array的轉換

var array =[[

'key1'

,"value1"],

['key2'

,'value2']]

// 陣列轉化成map物件

var mymap =

newmap

(array)

console.

log(mymap)

;// map物件轉換成陣列

var toarray = array.

from

(mymap)

console.

log(toarray)

;

2.map的轉殖

var mymap1 =

newmap([

['key1'

,"value1"],

['key2'

,'value2']]

)var mymap2 =

newmap

(mymap1)

console.

log(mymap1 === mymap2)

;//false

3.map的合併

var first =

newmap([

[1,'one'],

[2,'two'],

[3,'three'],

]);var second =

newmap([

[1,'uno'],

[2,'dos']]

);// 合併兩個 map 物件時,如果有重複的鍵值,則後面的會覆蓋前面的,對應值即 uno,dos, three

var merged =

newmap([

...first,

...second]

);

set與陣列非常相似,但是他的成員的值都是唯一的,沒有重複的值,所以可以用來去重,求交集,求並集

1.資料新增

var setitems =

newset([

1,1,

2,3]

)console.

log(setitems)

; set(3) 不重複

setitems.

add([1

,2,3

])setitems.

add([1

,2,3

])console.

log(setitems)

; set(5) 新增陣列時,因為引用不相同,所以可以新增

在原型上的屬性

add: ƒ add()

clear: ƒ clear()

constructor: ƒ set()

delete: ƒ delete()

entries: ƒ entries()

foreach: ƒ foreach()

has: ƒ has()

keys: ƒ values()

size: (…)

values: ƒ values()

symbol(symbol.iterator): ƒ values()

symbol(symbol.tostringtag): 「set」

get size: ƒ size()

2.資料轉換

// array 轉 set

var myset =

newset([

"value1"

,"value2"

,"value3"])

;// 用...操作符,將 set 轉 array

var myarray =

[...myset]

;string

// string 轉 set

var myset =

newset

('hello');

// set(4)

// 注:set 中 tostring 方法是不能將 set 轉換成 string

set物件作用

1.陣列去重

var myset =

newset([

1,2,

3,4,

4]);

[...myset]

;// [1, 2, 3, 4]

2.求並集

var a =

newset([

1,2,

3]);

var b =

newset([

4,3,

2]);

var union =

newset([

...a,

...b]);

//

3.求交集

var a =

newset([

1,2,

3]);

var b =

newset([

4,3,

2]);

var intersect =

newset([

...a]

.filter

(x => b.

has(x)))

;//

4.求差集

var a =

newset([

1,2,

3]);

var b =

newset([

4,3,

2]);

var difference =

newset([

...a]

.filter

(x =>

!b.has

(x)));

//

ES6新增資料型別

1.新增資料型別 symbol 2.proxy 用來攔截在乙個物件上的指定操作,如 var engineer var interceptor engineer new proxy engineer,interceptor engineer.salary 60 salary is changed to...

ES6 新增Set Map型別

1.set資料結構 1 定義 類似於陣列,但是其成員是唯一的 實現了interator介面 例子 2 set建構函式特性 a.可以接收乙個陣列 b.可以接收所有實現了interator介面的資料結構 例子 3 屬性,size 例子 4 方法 a.add value 新增成員 b.delete val...

es6 新增資料型別Symbol

es6在string number boolean null undefined object之外又新增了一種symbol型別。symbol意思是符號,有乙個特性 每次建立乙個symbol值都是不一樣的。symbol是程式建立並且可以用作屬性鍵的值,並且它能避免命名衝突的風險。var a new s...