JavaScript--Map和Set介绍

来源:互联网 发布:python怎么滤波图片 编辑:程序博客网 时间:2024/05/18 13:07

在学习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"  flasem.delete("JayZhou");//删除


Set

Set和Map类似,也是一组集合,但是Set不存储Value。并且Set中不应该出现重复的Key

eg:

var set1 = new Set();   //空的Sets.add(2);//添加Key 2s.add(3);//添加Key 3s.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,1alert(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",23alert(key);//当前的键"name","age"alert(map);//自身});

forEach里面的function的参数可以省略你不想要的。






1 0
原创粉丝点击