ES6 Map结构的应用实例分析


Posted in Javascript onJune 26, 2019

本文实例讲述了ES6 Map结构的应用。分享给大家供大家参考,具体如下:

Map 数据结构类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“任何—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

初识map

var obj = {
 'name':'Joh',
 qq:'5222',
 'full name':'Johnny'
};
let map = new Map();
map
 .set(obj, 'Hello map')
 .set('haha', 12)
 .set(52, obj)
 .set(NaN, new Set([1,2,3]));
console.log(map);
console.log(map.size); // 4

Map可以连续set,就像Set可以连续add一样,同样有size的api

map 的delete, has方法

var obj = {
 'name':'Joh',
 qq:'5222',
 'full name':'Johnny'
};
var arr = [1,2];
let map = new Map();
// map 可以连续set
map
 .set(obj,'11')
 .set(11,3)
 .set(12,'H')
 .set(arr,'h');
var delRes = map.delete(obj); // map不可以连续 delete
console.log(delRes); // true
var hasBool1 = map.has(11);
console.log(hasBool1); // true
var hasBool2 = map.has(arr);
console.log(hasBool2); // true
console.log(map.size); // 3

NaN在map上的特殊性与clear方法

let map = new Map();
// map 可以连续set
map
 .set(11,3)
 .set(12,'H')
 .set(NaN,'h1')
 .set(NaN,'h2'); // 覆盖前值
console.log(map.get(NaN)); // h2
map.clear();
console.log(map.size); // 0

和set相同,NaN在map上具有唯一性,clear方法会将集合清空

map 的构造函数参数的传递,取值get方法,keys方法,values方法

let map = new Map([
 ['name','Joh'],
 ['age',10]
]);
let name = map.get('name');
let age = map.get('age');
console.log(name); // Joh
console.log(age); // 10
let keys = map.keys();
for(let k of keys) {
 console.log(k); // 分别输出 name 和 age
}
let values = map.values();
for(let v of values) {
 console.log(v); // 分别输出 Joh 和 10
}

map与set的原型属性比较和map使用entries方法获得数据的实体

let map = new Map([
 ['name','Joh'],
 ['age',10]
]);
console.log(Set.prototype[Symbol.iterator] === Set.prototype.values); // true
console.log(Map.prototype[Symbol.iterator] === Map.prototype.values); // false
console.log(Map.prototype[Symbol.iterator] === Map.prototype.entries); // true
let entries = map.entries();
for (let en of entries) {
 console.log(en); // 分别输出 ['name','Joh'] 和 ['age',10]
}

map内forEach方法和对象传递,以及内部this的使用

let map = new Map([
 ['name','Joh'],
 ['age',10]
]);
var me = {
 name:"Joh"
};
map.forEach(function (val, key) {
 console.log(key, val); // 分别输出 name Joh 和 "age" 10
});
console.log('>>>>>');
map.forEach(function (val, key) {
 // console.log(key, val); // 分别输出 name Joh 和 "age" 10
 console.log(this); // {name: "Joh"} 此处的this就是传递进来的对象
}, me);

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
Aug 27 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
Mar 05 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
vue发送ajax请求详解
Oct 09 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 Javascript
vue实现日历备忘录功能
Sep 24 #Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 #Javascript
Vue.js实现备忘录功能
Jun 26 #Javascript
微信小程序数据统计和错误统计的实现方法
Jun 26 #Javascript
Vue移动端右滑屏幕返回上一页附源码下载
Jun 26 #Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 #Javascript
js+html实现周岁年龄计算器
Jun 25 #Javascript
You might like
php 启动报错如何解决
2014/01/17 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
python实现RSA加密(解密)算法
2016/02/17 Python
Python使用sorted排序的方法小结
2017/07/28 Python
python和ruby,我选谁?
2017/09/13 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python调用飞书发送消息的示例
2020/11/10 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
证婚人经典证婚词
2014/01/09 职场文书
法律进社区实施方案
2014/03/21 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL