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 相关文章推荐
Dom 是什么的详细说明
Oct 25 Javascript
读jQuery之十 事件模块概述
Jun 27 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
jQuery DOM操作实例
Mar 05 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 jQuery
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
vue实现员工信息录入功能
Jun 11 Javascript
JavaScript常用8种数组去重代码实例
Sep 09 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实现验证码功能
2006/10/09 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
跟老齐学Python之变量和参数
2014/10/10 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
python的slice notation的特殊用法详解
2019/12/27 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python为什么会环境变量设置不成功
2020/06/23 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
律政俏佳人观后感
2015/06/09 职场文书
青春雷锋观后感
2015/06/10 职场文书
导游词之吉林花园山
2019/10/17 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
python 如何在list中找Topk的数值和索引
2021/05/20 Python
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python