您的位置:首页 > Web前端 > JavaScript

JavaScript--Map和Set介绍

2016-02-28 13:40 501 查看
在学习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的参数可以省略你不想要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: