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入门——用one()方法绑定事件处理函数(仅触发一次)
Feb 05 Javascript
jQuery中end()方法用法实例
Jan 08 Javascript
javascript中的五种基本数据类型
Aug 26 Javascript
JavaScript判断对象是否为数组
Dec 22 Javascript
原生javascript实现的一个简单动画效果
Mar 30 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
vue-resource:jsonp请求百度搜索的接口示例
Nov 09 Javascript
javascript拖曳互换div的位置实现示例
Jun 28 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脚本中include文件出错解决方法
2008/11/20 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
利用Python获取操作系统信息实例
2016/09/02 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
学python安装的软件总结
2019/10/12 Python
西班牙手机之家:Phone House
2018/10/18 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
StringBuilder和String的区别
2015/05/18 面试题
文秘人员工作职责
2014/01/31 职场文书
五四演讲稿范文
2014/09/03 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
工作岗位职责范本
2015/02/15 职场文书
大学生团日活动总结
2015/05/06 职场文书
学生犯错保证书
2015/05/09 职场文书