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 相关文章推荐
jquery中map函数与each函数的区别实例介绍
Jun 23 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 Javascript
js实时获取并显示当前时间的方法
Jul 31 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
jQuery倒计时代码(超简单)
Feb 27 Javascript
Vue插件写、用详解(附demo)
Mar 20 Javascript
微信小程序 开发之全局配置
May 05 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
详解Angular结合zTree异步加载节点数据
Jan 20 Javascript
vue中使用rem布局代码详解
Oct 30 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
文史专业毕业生自荐信
2013/11/17 职场文书
农民工创业典型事迹
2014/01/25 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
说明书范文
2014/05/07 职场文书
小学语文教研活动总结
2014/07/01 职场文书
秋季运动会加油词
2015/07/18 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
python源码剖析之PyObject详解
2021/05/18 Python