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 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
原生javascript实现图片轮播效果代码
Sep 03 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
jQuery之按钮组件的深入解析
Jun 19 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
Nov 25 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
Mar 01 Javascript
servlet+jquery实现文件上传进度条示例代码
Jan 25 Javascript
RequireJS用法简单示例
Aug 20 Javascript
详解jQuery-each()方法
Mar 13 jQuery
layui问题之模拟table表格中的选中按钮选中事件的方法
Sep 20 Javascript
Javascript模块化机制实现原理详解
Apr 02 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
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python http接口自动化脚本详解
2018/01/02 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
Django 自动生成api接口文档教程
2019/11/19 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
社团成立邀请函
2014/01/08 职场文书
新娘父亲婚礼致辞
2014/01/16 职场文书
财政专业求职信范文
2014/02/19 职场文书
访谈节目策划方案
2014/05/15 职场文书
作风建设演讲稿
2014/05/23 职场文书
公司任命书模板
2014/06/06 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书