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的图片切换效果
Jul 06 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 jQuery
bootstrap3使用bootstrap datetimepicker日期插件
May 24 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP文件读写操作之文件写入代码
2011/01/13 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python通过future处理并发问题
2017/10/17 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python使用OpenCV进行标定
2018/05/08 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
什么是类的返射机制
2016/02/06 面试题
饭店工作计划书
2014/01/10 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
售后客服个人自我评价
2014/09/14 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技