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 相关文章推荐
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
javascript实现分栏显示小技巧附图
Oct 13 Javascript
javascript强制点击广告的方法
Feb 06 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
js只执行1次的函数示例
Jul 20 Javascript
解决html input验证只能输入数字,不能输入其他的问题
Jul 21 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
JS闭包经典实例详解
Dec 20 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
微信小程序点击view动态添加样式过程解析
Jan 21 Javascript
Vue关于组件化开发知识点详解
May 13 Javascript
vue 动态创建组件的两种方法
Dec 31 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
PHP APC缓存配置、使用详解
2014/03/06 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
跟老齐学Python之再深点,更懂list
2014/09/20 Python
django之session与分页(实例讲解)
2017/11/13 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
java判断三位数的实例讲解
2019/06/10 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python 实现try重新执行
2019/12/21 Python
Python项目跨域问题解决方案
2020/06/22 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
会计助理的岗位职责
2013/11/29 职场文书
人事经理岗位职责
2014/04/28 职场文书
作文评语怎么写
2014/12/25 职场文书
如何写好活动总结
2019/06/21 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP