在Java中,您可以使用for循环遍历数组中的对象,如下所示:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
// Do something
}
您可以在JavaScript中做同样的事情吗?
您有几种选择:
1.顺序for循环:
var myStringArray = ["Hello","World"];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++) {
console.log(myStringArray[i]);
//Do something
}
优点
适用于各种环境
您可以使用break
和continue
流控制语句
缺点
2. Array.prototype.forEach
ES5规范引入了许多有益的数组方法,其中之一是,Array.prototype.forEach
它为我们提供了一种遍历数组的简洁方法:
const array = ["one", "two", "three"]
array.forEach(function (item, index) {
console.log(item, index);
});
ES5规范发布时(截至2009年12月)已经有将近十年的时间,它已经由台式机,服务器和移动环境中的几乎所有现代引擎实现,因此可以安全地使用它们。
借助ES6箭头函数语法,它更加简洁:
array.forEach(item => console.log(item));
除非计划支持古老的平台(例如IE11),否则箭头功能也得到了广泛的实现。你也很安全。
优点
缺点
array.filter(item => item.condition < 10)
.forEach(item => console.log(item))
请记住,如果要迭代一个数组以从中构建另一个数组,则应使用map,我已经看过很多次这种反模式了。
反模式:
const numbers = [1,2,3,4,5], doubled = [];
numbers.forEach((n, i) => { doubled[i] = n * 2 });
map的正确用例:
const numbers = [1,2,3,4,5];
const doubled = numbers.map(n => n * 2);
console.log(doubled);
同样,例如,如果您尝试将数组缩小为一个值,则想对数字数组求和,则应使用reduce方法。
反模式:
const numbers = [1,2,3,4,5];
const sum = 0;
numbers.forEach(num => { sum += num });
正确使用reduce:
const numbers = [1,2,3,4,5];
const sum = numbers.reduce((total, n) => total + n, 0);
console.log(sum);
3. ES6 for-of声明
ES6标准引入了可迭代对象的概念,并定义了用于遍历数据的新结构,即for...of
语句。
该语句适用于任何类型的可迭代对象,也适用于生成器(任何具有[Symbol.iterator]
属性的对象)。
根据定义,数组对象是ES6中的内置可迭代对象,因此可以在它们上使用此语句:
let colors = ['red', 'green', 'blue'];
for (const color of colors){
console.log(color);
}
优点
break/ continue
)。缺点
如果您以较旧的浏览器为目标,则转换后的输出可能会让您感到惊讶。
不使用 for...in
@zipcodeman建议使用该for...in
语句,但是为了for-in
避免迭代数组,该语句旨在枚举对象属性。
不应将其用于类似数组的对象,因为:
第二点是它会给您带来很多问题,例如,如果您扩展Array.prototype
对象以在其中包含方法,那么该属性也会被枚举。
例如:
Array.prototype.foo = "foo!";
var array = ['a', 'b', 'c'];
for (var i in array) {
console.log(array[i]);
}
上面的代码将控制台日志“ a”,“ b”,“ c”和“ foo!”。
如果您使用一些严重依赖本机原型扩充的库(例如MooTools),则可能会尤其成问题。
for-in
我之前说过的语句用来枚举对象属性,例如:
var obj = {
"a": 1,
"b": 2,
"c": 3
};
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
// or if (Object.prototype.hasOwnProperty.call(obj,prop)) for safety...
console.log("prop: " + prop + " value: " + obj[prop])
}
}
在上面的示例中,该hasOwnProperty方法仅允许您枚举自己的属性,仅枚举对象物理上具有的属性,而没有枚举属性。
本文向大家介绍JavaScript中的图遍历,包括了JavaScript中的图遍历的使用技巧和注意事项,需要的朋友参考一下 图遍历(也称为图搜索)是指访问(检查和/或更新)图中每个顶点的过程。此类遍历按访问顶点的顺序分类。
本文向大家介绍JavaScript中的树遍历,包括了JavaScript中的树遍历的使用技巧和注意事项,需要的朋友参考一下 树遍历是指一次访问树数据结构中的每个节点的过程。此类遍历按访问节点的顺序分类。
问题内容: 如何使用JavaScript遍历数组中的所有条目? 我以为是这样的: 我的数组在哪里,但这似乎是不正确的。 问题答案: TL; DR 除非你将其与防护措施配合使用,或者至少知道它为什么会咬住你,否则请勿使用。 通常最好的选择是 一个环(ES2015 +只), (| )(或其亲戚等)(仅适用于ES5 +), 一个简单的老式循环, 或有保障。 但是,还有 很多 更多的探索,阅读… Java
本文向大家介绍js遍历map javaScript遍历map的简单实现,包括了js遍历map javaScript遍历map的简单实现的使用技巧和注意事项,需要的朋友参考一下 js遍历map javaScript遍历map的简单实现 这样会把map给遍历掉,显示在浏览器上的控制器里。 以上这篇js遍历map javaScript遍历map的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参
Array类实现了迭代器,可使用迭代器对数组进行遍历,如果是数字索引数组,还可以直接使用for循环进行遍历。 数字索引数组 for(int i = 0; i < array.count(); i++) { php::echo("key=%d, value=%s.\n", i, array[i].toCString()); } 迭代器 for(auto i = array.begin();
问题内容: 我很难找到一种以我想要的方式遍历此JSON对象的方法。我在这里只使用Javascript。 首先,这是对象 现在,我正在尝试基本方法来访问此对象上的每个dialog_trunk。理想情况下,我想遍历对象,并为每个主干显示其值。 我已经尝试过使用for循环动态地生成dialog_trunk的名称/编号,但是我无法使用对象名称的字符串来访问该对象,因此我不确定从何处去。 问题答案: 为此使