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 相关文章推荐
setAttribute 与 class冲突解决
Feb 17 Javascript
js读取配置文件自写
Feb 11 Javascript
javascript轻量级模板引擎juicer使用指南
Jun 22 Javascript
浅谈javascript 函数属性和方法
Jan 21 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
JavaScript 反射和属性赋值实例解析
Oct 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python实现的文件同步服务器实例
2015/06/02 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
python实现图像拼接功能
2020/03/23 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
求职信写作要突出重点
2014/01/01 职场文书
个人借条范本
2015/05/25 职场文书