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 相关文章推荐
js单独获取一个checkbox看其是否被选中
Sep 22 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
jQuery实现获取table表格第一列值的方法
Mar 01 Javascript
解决wx.onMenuShareTimeline出现的问题
Aug 16 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
Oct 14 Javascript
RGB和YUV 多媒体编程基础详细介绍
Nov 04 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
浅谈手写node可读流之流动模式
Jun 01 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 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
第七节 类的静态成员 [7]
2006/10/09 PHP
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
js数组去重的hash方法
2016/12/22 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python格式化css文件的方法
2015/03/10 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
python中append实例用法总结
2019/07/30 Python
python3注册全局热键的实现
2020/03/22 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
借款协议书
2014/04/12 职场文书
借款协议书范本
2014/04/22 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
试了下Golang实现try catch的方法
2021/07/01 Golang
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript