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...