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 01 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
微信小程序中input标签详解及简单实例
May 18 Javascript
关于react-router的几种配置方式详解
Jul 24 Javascript
js中的闭包学习心得
Feb 06 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 Javascript
深入理解Vue 组件之间传值
Aug 16 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 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
ftp类(example.php)
2006/10/09 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
js 判断 enter 事件
2009/02/12 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python实现的科学计算器功能示例
2017/08/04 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
财务内勤岗位职责
2014/04/17 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
Python 如何安装Selenium
2021/05/06 Python
Vue详细的入门笔记
2021/05/10 Vue.js
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫