JavaScript之iterable_动力节点Java学院整理


Posted in Javascript onJune 29, 2017

遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。

具有iterable类型的集合可以通过新的for ... of循环来遍历。

for ... of循环是ES6引入的新的语法,请测试你的浏览器是否支持:

'use strict';
var a = [1, 2, 3];
for (var x of a) {
}
alert('你的浏览器支持for ... of');

for ... of循环遍历集合,用法如下:

var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
  alert(x);
}
for (var x of s) { // 遍历Set
  alert(x);
}
for (var x of m) { // 遍历Map
  alert(x[0] + '=' + x[1]);
}

你可能会有疑问,for ... of循环和for ... in循环有何区别?

for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。

当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
  alert(x); // '0', '1', '2', 'name'
}
for ... in循环将把name包括在内,但Array的length属性却不包括在内。
for ... of循环则完全修复了这些问题,它只循环集合本身的元素:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
  alert(x); // 'A', 'B', 'C'
}

这就是为什么要引入新的for ... of循环。

然而,更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。以Array为例:

var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
  // element: 指向当前元素的值
  // index: 指向当前索引
  // array: 指向Array对象本身
  alert(element);
});

注意,forEach()方法是ES5.1标准引入的,你需要测试浏览器是否支持。

SetArray类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
  alert(element);
});

Map的回调函数参数依次为valuekeymap本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
  alert(value);
});

如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。例如,只需要获得Arrayelement

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
  alert(element);
});
Javascript 相关文章推荐
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
javascript实现的简单的表单验证
Jul 10 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 #Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 #Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 #Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 #jQuery
You might like
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
php正则修正符用法实例详解
2016/12/29 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
Python线程详解
2015/06/24 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
十八届三中全会报告学习材料
2014/02/17 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
新闻稿格式范文
2015/07/18 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python
Django REST framework 限流功能的使用
2021/06/24 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS