在es6的新特性中,加入了Map和Set集合,是一種資料結構。
javascript中預設使用{}
來表示一組鍵值對。
但是javascript的物件有個問題,key必須是字串型別的,其實上其他資料型別作為key也是合理的。
為了解決這個問題,es6中新增了Map。
如何宣告:
'use strict';
var a = new Map();
var s = new Set();
複製程式碼
#Map
舉個例子,假設要根據同學的名字查詢該同學的成績,如果用陣列實現,我們這麼寫:
var names = ["mickel", "bob", "tracy"];
var scores = [95, 97, 88];
複製程式碼
給定一個名字,要查詢某個同學的成績,就需要現在names陣列中找到對應的位置,然後在scores中取出對應的成績,陣列越長,耗時越長。
如果我們現在用Map實現,只需要一個“名字-成績”的對照表,不管這個表有多大,查詢速度都不會變慢。
var m = new Map([['mickel', 95],['bob', 97],['tracy', 88]]);
var tracyScore = m.get('tracy');
console.log(tracyScore); //88
複製程式碼
初始化Map需要一個二維陣列,或者直接初始化一個空的Map。Map具有以下方法:
var n = new Map();
n.set('adam', 80);
n.set('bob', 77);
console.log(n.has('adam')); //true
console.log(n.get('adam')); //80
n.delete('adam');
console.log(n.get('adam')); //undefined
複製程式碼
由於一個key只能對應一個vaule,所以對一個key放入value,後面的值會覆蓋前面的值。
Set
set和map類似,也是一組key的集合,但是不儲存value.由於key不能重複,所以,在Set中,沒有重複的值。
要建立一個Set,需要提供一個陣列作為輸入,或者直接建立一個空的Set:
var s1= new Set();
var s2 = new Set([1,3,2]);
console.log(s1) //Set {}
console.log(s2) //Set { 1, 3, 2 }
var s3 = new Set([1,2,3,4,45,6,3,'6']);
console.log(s3); //Set { 1, 2, 3, 4, 45, 6, '6' }
複製程式碼
重複的元素會被過濾掉
通過add(key)
方法可以新增元素到Set中。
s3.add(12);
console.log(s3) //Set { 1, 2, 3, 4, 45, 6, '6', 12 }
複製程式碼
新增重複的元素不會有效果的
通過delete(key)
方法可以刪除元素:
s3.delete(1);
console.log(s3) //Set { 2, 3, 4, 45, 6, '6', 12 }
複製程式碼
##小結
Map和Set是es6標準新增的資料型別,請根據瀏覽器的支援情況和實際情況決定是否要使用。