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 子窗口操作父窗口的代码
Sep 21 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 Javascript
基于jquery二维码生成插件qrcode
Jan 07 Javascript
详解vue过滤器在v2.0版本用法
Jun 01 Javascript
Bootstrap提示框效果的实例代码
Jul 12 Javascript
详解element-ui中form验证杂记
Mar 04 Javascript
JavaScript实现放大镜效果代码示例
Apr 29 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
基于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学习之 循环结构实现代码
2011/06/09 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
yii中widget的用法
2014/12/03 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
php微信开发接入
2016/08/27 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
js切换div css注意的细节
2012/12/10 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python基于WordCloud制作词云图
2019/11/29 Python
python新手学习使用库
2020/06/11 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
火车来了教学反思
2014/02/11 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
工作推荐信范文
2014/05/10 职场文书
企业文化标语口号
2014/06/09 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
酒店开业主持词
2015/07/02 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android