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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
js实现仿Windows风格选项卡和按钮效果实例
May 13 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
Jul 24 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
react native 仿微信聊天室实例代码
Sep 17 Javascript
JS setTimeout与setInterval的区别
Apr 20 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP insert语法详解
2008/06/07 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
php命名空间学习详解
2014/02/27 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
js自带函数备忘 数组
2006/12/29 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
理解Python中的类与实例
2015/04/27 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
校园广播稿500字
2014/02/04 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
成本会计岗位职责
2015/02/03 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书