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 相关文章推荐
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
jquery json 实例代码
Dec 02 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
JavaScript重载函数实例剖析
May 13 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 Javascript
浅谈Angular4中常用管道
Sep 27 Javascript
ES6关于Promise的用法详解
May 07 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
PHP编程函数安全篇
2013/01/08 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
php编写简单的文章发布程序
2015/06/18 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
js禁止表单重复提交
2017/08/29 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
有趣的python小程序分享
2017/12/05 Python
关于python写入文件自动换行的问题
2018/06/23 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
物业品质提升方案
2014/06/08 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
个人催款函范文
2015/06/23 职场文书