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 相关文章推荐
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
angularJS中$apply()方法详解
Jan 07 Javascript
JavaScript 学习笔记之基础中的基础
Jan 13 Javascript
jQuery中$(function() {});问题详解
Aug 10 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 Javascript
原生js实现下拉框功能(支持键盘事件)
Jan 13 Javascript
微信小程序canvas实现刮刮乐效果
Jul 09 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
js作用域及作用域链工作引擎
Jul 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
3种php生成唯一id的方法
2015/11/23 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
php实现数字补零的方法总结
2018/09/12 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
13个PHP函数超实用
2015/10/21 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
用python对oracle进行简单性能测试
2020/12/05 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
自荐信的基本格式
2014/02/22 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
工商局调档介绍信
2015/10/22 职场文书
初中历史教学反思
2016/02/19 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
python关于集合的知识案例详解
2021/05/30 Python