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 相关文章推荐
用JS操作FRAME中的IFRAME及其内容的实现代码
Jul 26 Javascript
jquery提示 "object expected"的解决方法
Dec 13 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
Sep 18 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
AngulaJS路由 ui-router 传参实例
Apr 28 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
Vue核心概念Getter的使用方法
Jan 18 Javascript
vue vant Area组件使用详解
Dec 09 Javascript
JavaScript实现移动端带transition动画的轮播效果
Mar 24 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中return的用法实例分析
2015/02/28 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP7 windows支持
2021/03/09 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
python制作websocket服务器实例分享
2016/11/20 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
python实现单机五子棋
2020/08/28 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
心理健康活动总结
2014/04/30 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
优秀教师单行材料
2014/12/16 职场文书
学生会辞职信
2015/03/02 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python