JavaScript--Map和Set介紹

在學習JavaScript的數據類型的時候,比較陌生的是Map和Set。[Map和Set是JavaScript的數據類型

Map

在學習Map的時候,你可以把Map類比爲OC裏面的Dictionary。在Javascript中,默認的對象表示方式是在"{""}"中存儲鍵值對,比方說{"name":"wu","age":23},但是對象裏面的Key必須是字符串,這使得其有了侷限性,因爲數字(比如學號)等其他數據類型也應該可以作爲對象的Key。所以在ES6規範中引入了Map。[並不是所有的瀏覽器都支持ES6]

eg:

var m = new Map([["JayZhou,37"],["AndyLiu,56"]]);
m.get("JayZhou");  //-->37


初始化Map需要一個二維數組,這與OC裏面Dictionary的初始化是有區別的,但是二者的功用差不多

下面是申明一個空的Map,再對其進行操作:

var m = new Map();
m.set(37,"me");			//添加一個鍵值對
m.get(37);  <span style="white-space:pre">			</span>//-->"me"
m.has("AndyLiu");		//判斷該Map裏面是否包含鍵"AndyLiu"  flase
m.delete("JayZhou");		//刪除




Set

Set和Map類似,也是一組集合,但是Set不存儲Value。並且Set中不應該出現重複的Key

eg:

var set1 = new Set();   //空的Set
s.add(2);		//添加Key 2
s.add(3);		//添加Key 3
s.add("2");		//添加Key "2"
s.add(2); 		//添加Key 2    無效果      s{2,3,"2"}

var set2 = new Set([1,2,3]);
s.add(2);
s.delete(2);


iterable

for...of

就像OC裏面array、set、dictionary統稱集合一樣,JavaScript裏面Map、Set、Array都屬於iterable類型。iterable類型統一用for...of循環遍歷,Array可以採用下標遍歷。

for...of是ES6引入的,並不是所有的瀏覽器都支持。[爲啥不用for...in遍歷,for...in遍歷的是對象的屬性名稱,for...of遍歷的是遍歷的是集合本身的元素]

eg:

var map1 = new Map([["name","wu"],["age",23]]);
for (var x of map1) {		//遍歷map1,map1是2維數組,x爲數組
	alert(x[0]);   		//x[0]爲key,x[1]爲value
}
var array1 = ["name",23,"age"];
array1.great = 3;		//數組實際也是一個對象,爲array1添加一個新屬性
for (var x of array1) {		//遍歷array1,array1是1維數組
	alert(x);		//x分別爲"name"、23、"age"
}
for (var x in array1) {
	alert(x);		//x分別爲"name"、23、"age"、3
}


forEach

iterable內置的方法,參數爲一個函數,forEach其實是一個高階函數,對iterable進行遍歷

eg:

var array1 = ["1","2"];
array1.forEach(function (element,index,array){
	alert(element);			//當前的元素"1","2"
	alert(index);			//當前的索引0,1
	alert(array);			//自身
});
var set1 = new Set([1,2]);
set1.forEach(function (element,sameElement,set){
	alert(element);				//當前的元素
	alert(sameElement);			//當前的元素,set是沒有index的
	alert(set);				//自身
});
var map1 = new Map([["name","wu"],["age",23]]);
map1.forEach(function (value,key,map){
	alert(value);            		//當前的鍵值"wu",23
	alert(key);				//當前的鍵"name","age"
	alert(map);				//自身
});

forEach裏面的function的參數可以省略你不想要的。






發佈了34 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章