ES6新数据结构Map功能与用法示例


Posted in Javascript onMarch 31, 2017

本文实例讲述了ES6新数据结构Map功能与用法。分享给大家供大家参考,具体如下:

新数据结构Map

JavaScript中对象的本质是键值对的集合,但是键只能是字符串。为了弥补这种缺憾,ES6带来了一种新的数据结构Map。Map也是键值对的集合,只是键不仅可以是字符串还可以是其他数据类型,比如:对象(是不是很神奇)。请看下面例子。

var m = new Map();
var ul = document.getElementsByTagName('ul');
m.set(ul,'hi');
console.log(m.get(ul)); //hi

对于Map的操作有以下几个:

m.set(ul,'content'); //为Map增加成员
m.get(ul);//获取键 ul对应的值
m.has(ul);//返回布尔值,判断是否含有键 ul
m.delete(ul);//删除键 ul,成功返回true,失败返回false
m.size //返回m长度
m.clear(); //清除m所有成员

直接为Map赋初值的方法:

var m = new Map([[li_1,'hello'],[li_2,'world']]);

接受的参数为一个数组,数组内的成员是表示一个一个键值对的数组。如果你蒙了,请看上行代码的实际执行情况:

var li_1 = document.getElementsByTagName('li')[0];
var li_2 = document.getElementsByTagName('li')[1];
var list = [ [li_1,'hello'] , [li_2,'world'] ];
var m = new Map();
list.forEach( ([key,value]) => m.set(key,value) );
console.log(m.get(li_1)); //hello

如果对一个键多次赋值,后面的值会覆盖前面的值。值得注意的是,当键是对象时,必须是引用相同,才认为键是相同的。下面介绍Map的遍历方法。

var ul = document.getElementsByTagName('ul');
var li_1 = document.getElementsByTagName('li')[0];
var li_2 = document.getElementsByTagName('li')[1];
var list = [ [li_1,'hello'] , [li_2,'world'] ];
var m = new Map();
list.forEach( ([key,value]) => m.set(key,value) );
for ( let key of m.keys() ){
  console.log(key);
}
for ( let val of m.values() ){
  console.log(val);
}
for ( let item of m.entries() ){
  console.log(item[0],item[1]);
}
for ( let [key,val] of m.entries() ){
  console.log(key,val);
}
m.forEach( function( val , key , ul ){
  console.log( this ); //ul
  console.log( val , key);
} , ul ); // forEach的第二个参数用于改变匿名函数中this指向

Map与其他数据类型的转换

Map转数据的最简单方式是使用 ... 扩展运算符。例如:

console.log( ...m ); //[li, "hello"] [li, "world"]

Map转对象时,必须所有键都是字符串,使用Object.create()函数。Map转JSON时,要求也要求所有键都是字符串,使用JSON.Stringify()函数。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
关于文本限制字数的js代码
Apr 02 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
Feb 15 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
JS常用表单验证方法总结
May 22 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
JS实现标签页切换效果
May 04 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
利用npm 安装删除模块的方法
May 15 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 #Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 #Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 #Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 #Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 #Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 #Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 #Javascript
You might like
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
cookie的secure属性详解
2015/04/08 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
vue-cli配置环境变量的方法
2018/07/09 Javascript
layui table 参数设置方法
2018/08/14 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
python使用分治法实现求解最大值的方法
2015/05/12 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python是否适合网页编程详解
2019/10/04 Python
sklearn+python:线性回归案例
2020/02/24 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
医护人员英文求职信范文
2013/11/26 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
应届毕业生通用的自荐书范文
2014/02/07 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
省文明单位申报材料
2014/05/08 职场文书
安全施工责任书
2014/08/25 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
python使用BeautifulSoup 解析HTML
2022/04/24 Python