在 Java 中,您可以使用 for
循环来遍历数组中的对象,如下所示:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray) {
// Do something
}
我可以在 JavaScript 中做同样的事情吗?
原文由 Mark Szymanski 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java 中,您可以使用 for
循环来遍历数组中的对象,如下所示:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray) {
// Do something
}
我可以在 JavaScript 中做同样的事情吗?
原文由 Mark Szymanski 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答2.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
三个主要选项:
for (var i = 0; i < xs.length; i++) { console.log(xs[i]); }
xs.forEach((x, i) => console.log(x));
for (const x of xs) { console.log(x); }
详细示例如下。
1.顺序
for
循环:优点
break
和continue
流量控制语句缺点
2.
Array.prototype.forEach
:ES5 规范引入了很多有益的数组方法。其中一个
Array.prototype.forEach
为我们提供了一种迭代数组的简洁方法:距离 ES5 规范发布(2009 年 12 月)的写作时间已近十年,它已被桌面、服务器和移动环境中的几乎所有现代引擎实现,因此可以安全地使用它们。
使用 ES6 箭头函数语法,它更加简洁:
除非您计划支持旧平台(例如 Internet Explorer 11 ),否则箭头功能也被广泛实现;你也可以安全离开了。
优点
缺点
break
/continue
通常,您可以通过在迭代数组元素之前过滤数组元素来替换对
break
的命令式循环的需要,例如:请记住,如果您正在迭代一个数组 _以从中构建另一个数组_,您应该使用
map
。我见过这种反模式很多次了。反模式:
地图 的正确用例:
此外,如果您试图将数组 缩减 为一个值,例如,您想要对一组数字求和,则应使用 reduce 方法。
反模式:
正确使用 reduce :
3. ES6
for-of
声明:ES6 标准引入了可迭代对象的概念,并定义了一种新的遍历数据的结构,即
for...of
语句。此语句适用于任何类型的可迭代对象,也适用于生成器(具有
\[Symbol.iterator\]
属性的任何对象)。数组对象根据定义是 ES6 中的内置可迭代对象,因此您可以对它们使用以下语句:
优点
break
/continue
)。缺点
不要使用
for...in
@zipcodeman 建议使用
for...in
语句,但对于迭代数组for-in
应该避免,该语句旨在 枚举 对象属性。它不应该用于类似数组的对象,因为:
第二点是它会给你带来很多问题,例如,如果你扩展
Array.prototype
对象以在其中包含一个方法,那么该属性也会被枚举。例如:
上面的代码将控制台记录“a”、“b”、“c”和“foo!”。
如果您使用一些严重依赖本机原型增强的库(例如 MooTools ),这可能会成为一个特别的问题。
前面说过的
for-in
语句是用来 枚举 对象属性的,例如:在上面的示例中,
hasOwnProperty
方法允许您仅枚举 _自己的属性_。就是这样,只有对象物理上具有的属性,没有继承的属性。我建议您阅读以下文章: