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:
初始化Map需要一个二维数组,这与OC里面Dictionary的初始化是有区别的,但是二者的功用差不多
下面是申明一个空的Map,再对其进行操作:
Set
Set和Map类似,也是一组集合,但是Set不存储Value。并且Set中不应该出现重复的Key。
eg:
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:
forEach
iterable内置的方法,参数为一个函数,forEach其实是一个高阶函数,对iterable进行遍历
eg:
forEach里面的function的参数可以省略你不想要的。
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的参数可以省略你不想要的。
相关文章推荐
- 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码
- bzoj 1031: [JSOI2007]字符加密Cipher 后缀数组
- 1016: [JSOI2008]最小生成树计数
- JSP—九大隐式对象之pageContext
- 关于sort的使用
- Javascript的数据类型简述
- JS之数组
- jsp入门
- Atom技巧
- bzoj 1029: [JSOI2007]建筑抢修 贪心
- Javascript中的var self = this
- Gson 设定固定的日期格式来生成Gson-------Gson 可以将某个对象转换成json,也可将json转换成对象
- Js事件列表
- 封装json ajax函数
- 妙用javascript:void(0)
- js实现&lt;a&gt;超链接的跳转验证
- 《JavaScript语言精粹》知识点总结(二)
- window 窗口对象 - Javascript语言描述
- HTML、CSS、JavaScript学习总结
- bzoj 1013: [JSOI2008]球形空间产生器sphere