ES6教程之for循环和Map,Set用法分析


Posted in Javascript onApril 10, 2017

本文实例讲述了ES6教程之for循环和Map,Set用法。分享给大家供大家参考,具体如下:

现在大家先想一想,如果要你遍历一个数组的元素,你会选择如何去做呢?一般都会想起for循环:

for (var index = 0; index < myArray.length; index++) {
 console.log(myArray[index]);
}

可惜我得告诉你,这个方法是二十年的人才应该使用的方法,在ES5中已经提出了更为简便的forEach方法,代码如下:

myArray.forEach(function (value) {
 console.log(value);
});

虽然forEach方法简短一点,但是它也有它的缺点,就是不能够break来中途退出循环,也不能通过return来退出循环。

那么不是还有for-in方法吗:

for (var index in myArray) { 
 console.log(myArray[index]);
}

可是for-in方法实际上是为存储key的键值对型对象准备的,而不是为数组准备的,它的下标为字符串“1”,“2”……相信大家都知道“1”+“2”会怎么样吧?

for-of循环

ES6为了不影响以前的代码,为了满足很多人已经养成的习惯,只能推出一种新的循环语法for-of:

for (var value of myArray) {
 console.log(value);
}

对比for-in和for-of:

var a = ["a","b","c","d","e"];
for (var idx in a) {
  console.log( idx ); 
  }// 0 1 2 3 4 
for (var val of a) {
  console.log( val ); 
  }// "a" "b" "c" "d" "e"

for-of不仅仅可以用于数组,还可以用在dom对象上,同样作用于Map和Set对象

下面介绍一下Map和Set对象

Map,Set

JavaScript的默认对象表示方式是{},但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map。

Map是具有极快查找速度的键值对结构。

我们看看Map的使用示例:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

上面的has方法比indexOf速度快。

Set和Map类似,也是存在key的列表,只不过Set中的元素不能够重复。

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

可以看到,再次添加的重复数据会被过滤掉。

那么这两种对象的运用场景有哪些呢?

Map可以用来存储键值对,比如姓名和年龄,而Set可以用来存储不能重复的目标,比如学号列表。

for-of用于对象

好啦,介绍完了两种类型的新对象,让我们看看for-of如何作用于Set对象上的:

var uniqueWords = new Set(words);
for (var word of uniqueWords) {
 console.log(word);
}

遍历Map对象则不同,因为Map是以键值对存储的,所以我们需要分开两个单独的变量来遍历:

for (var [key, value] of phoneBookMap) {
 console.log(key + "'s phone number is: " + value);
}

但是需要注意一点。for-of并不是用来遍历普通的对象的属性的,如果我们一定要这么做,可以使用for-in或者如下方法:

for (var key of Object.keys(someObject)) {
 console.log(key + ": " + someObject[key]);
}

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
JSON 学习之完全手册 图文
May 29 Javascript
google地图的路线实现代码
Aug 20 Javascript
JavaScript Accessor实现说明
Dec 06 Javascript
brook javascript框架介绍
Oct 10 Javascript
谈谈JavaScript的New关键字
Aug 26 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
Feb 28 jQuery
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
深入分析jQuery.one() 函数
Jun 03 jQuery
vue-model实现简易计算器
Aug 17 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 #Javascript
js实现适配不同的屏幕大小
Apr 10 #Javascript
You might like
第六节 访问属性和方法 [6]
2006/10/09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
php下获取http状态的实现代码
2014/05/09 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
python数据处理实战(必看篇)
2017/06/11 Python
python模块导入的细节详解
2018/12/10 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python Tkinter的图片刷新实例
2019/06/14 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Flask处理Web表单的实现方法
2021/01/31 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
医药营销个人求职信范文
2014/02/07 职场文书
环保志愿者活动总结
2014/06/27 职场文书
重阳节标语大全
2014/10/07 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript