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处理json数据实例分析
Jun 03 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
Apr 06 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
js原生跨域_用script标签的简单实现
Sep 24 Javascript
Bootstrap整体框架之JavaScript插件架构
Dec 15 Javascript
js 颜色选择插件
Jan 23 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
解决vue 按钮多次点击重复提交数据问题
May 10 Javascript
javascript异步处理与Jquery deferred对象用法总结
Jun 04 jQuery
简单了解常用的JavaScript 库
Jul 16 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
桌面中心(四)数据显示
2006/10/09 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
tab栏切换原理
2017/03/22 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
如何用Python绘制3D柱形图
2020/09/16 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
const和static readonly区别
2013/05/20 面试题
北大自主招生自荐信
2013/10/19 职场文书
机修工岗位职责
2013/11/24 职场文书
社团活动总结书
2014/06/27 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL