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 Replace()的高级使用方法介绍
Jun 29 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
Jun 19 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
JavaScript中利用Array和Object实现Map的方法
Jul 27 Javascript
用jQuery的AJax实现异步访问、异步加载
Nov 02 Javascript
EasyUI学习之Combobox下拉列表(1)
Dec 29 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 Javascript
mpvue小程序仿qq左滑置顶删除组件
Aug 03 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
微信小程序实现上传多张图片、删除图片
Jul 29 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
原生js实现日期联动
2015/01/12 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
python基于右递归解决八皇后问题的方法
2015/05/25 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python3实现弹弹球小游戏
2019/11/25 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python如何生成xml文件
2020/06/04 Python
详解python tkinter 图片插入问题
2020/09/03 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
酒店司机岗位职责
2013/12/14 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
社区母亲节活动总结
2015/02/10 职场文书
试用期自我评价范文
2015/03/10 职场文书
Python 数据可视化之Matplotlib详解
2021/11/02 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript