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/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 Javascript
bootstrap table使用入门基本用法
May 24 Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
Jun 29 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
如何使node也支持从url加载一个module详解
Jun 05 Javascript
webpack手动配置React开发环境的步骤
Jul 02 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
JS工厂模式开发实践案例分析
Oct 17 Javascript
JS常见内存泄漏及解决方案解析
May 30 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
无线电广播的开始
2002/01/30 无线电
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
python查询mysql,返回json的实例
2018/03/26 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python实现一个猜拳游戏
2020/04/05 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
个人自我鉴定总结
2014/03/25 职场文书
高中生班主任评语
2014/04/25 职场文书
项目建议书模板
2014/05/12 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
安全先进班组材料
2014/12/26 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2016公司年会通知范文
2015/04/25 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
实现GO语言对数组切片去重
2022/04/20 Golang