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 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
jQuery ui1.7 dialog只能弹出一次问题
Aug 27 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
简单的Jquery遮罩层代码实例
Nov 14 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
Sep 13 Javascript
angular2路由切换改变页面title的示例代码
Aug 23 Javascript
layer实现关闭弹出层刷新父界面功能详解
Nov 15 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
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 常用类汇总 推荐收藏
2010/05/13 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
市场营销专业毕业生求职信
2014/03/26 职场文书
婚前保证书
2014/04/29 职场文书
三好生演讲稿
2014/09/12 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
财务工作失职检讨书
2014/11/21 职场文书
实名检举信范文
2015/03/02 职场文书
学习与创新自我评价
2015/03/09 职场文书
商场营业员岗位职责
2015/04/14 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android