在JavaScript中循环遍历数组

3986
在Java中,您可以使用for循环遍历数组中的对象,如下所示:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray) {
    // Do something
}

我能在JavaScript中做同样的事情吗?


7
我有点困惑,使用增强for循环来访问对象是可以的吗?而用顺序循环来填充一个对象呢?这样做正确吗? - Mark Szymanski
54
不,这很简单,数组对象有数字索引,所以你想按照数字顺序迭代这些索引,一个连续的循环可以保证这一点,增强型的 for-in 循环枚举对象属性时没有特定的顺序,并且也枚举继承的属性...对于迭代数组,始终建议使用连续的循环。 - Christian C. Salvadó
7
相关 - https://dev59.com/mG435IYBdhLWcg3wjwzS - jondavidjohn
9
这里有一个循环遍历数组的解决方案的基准测试:http://jsben.ch/#/Q9oD5 - EscapeNetscape
13
@CMS 不,实际上并不简单。在其他所有语言中都很简单。但在JS中却非常复杂,因为你需要使用inof,它们有不同的用法。此外,你还需要使用forEach和丑陋而烦人的基于索引的循环方式。其他现代语言循环集合都很容易和直观,没有任何意外或困惑。JS也可以做到,但它并没有。 - jpmc26
显示剩余5条评论
46个回答

11

正式(或许有些古老)的方式是 Array.prototype.forEach(...)

var arr = ["apple", "banana", "cherry", "mango"];
arr.forEach(function(item, index, _) {
   console.log("[" + index + "] = '" + item + "'");
});

你的“一些代码”应该包含一个示例。不太清楚变量是直接传递还是作为“this”或其他方式传递。 - John Lord

10
//Make array
var array = ["1","2","3","4","5","6","7","8","9","10"]
//Loop
for(var i = 0; i < array.length; i++){
 console.log((i+1) + " --> " + array[i])
}

要得到实际的数字i,您需要将(i+1)更改为i或者(i),如果您愿意的话。
希望能对您有所帮助。


9
简短回答:是的。您可以使用以下内容进行操作:
var myArray = ["element1", "element2", "element3", "element4"];

for (i = 0; i < myArray.length; i++) {
  console.log(myArray[i]);
}

在浏览器控制台中,您可以看到类似于“element1”,“element2”等的打印输出。

9
var myStringArray = ["hello", "World"];
myStringArray.forEach(function(val, index){
   console.log(val, index);
})

9
var x = [4, 5, 6];
for (i = 0, j = x[i]; i < x.length; j = x[++i]) {
    console.log(i,j);
}

更加清洁...


z.forEach(j => console.log(j)); 相比,这不是很干净的写法。 - Sapphire_Brick

8
当然,这种方法效率低下,许多人都不喜欢它,但它是最接近所提到的方法之一。
var myStringArray = ["Hello","World"];
myStringArray.forEach(function(f){
    // Do something
})

3
这个确切的功能已经包含在马克·里德的答案中。 - user513951

8

看起来所有的变种都被列出了,除了lodash中的forEach函数:

_.forEach([1, 2], (value) => {
  console.log(value);
});

8

一个简单的一行解决方案:

arr = ["table", "chair"];

// Solution
arr.map((e) => {
  console.log(e);
  return e;
});


4
你最好使用.forEach()并删除return e; - Michel Jung
3
正如“map”所暗示的,函数“map”的作用是将某个值映射为另一个值,因此我不建议在这个特定的示例中使用它。 - marpme

7

在JavaScript中,有多种方法可以处理数组。以下是处理数组的常见方式。

方法1:

const students = ["Arun","Jos","John","Kiran"]
for (var index = 0; index < students.length; index++) {
  console.log(students[index]);
}

方法 2:

students.forEach((student, index) => console.log(student));

方法 3:

for (const student of students) {
      console.log(student);
}
  

5

好的,这样怎么样:

for (var key in myStringArray) {
    console.log(myStringArray[key]);
}

11
不建议使用for/in循环来枚举数组,因为枚举的顺序不保证,并且它会枚举属性而不仅仅是数组元素。欲了解更多信息,请参见https://dev59.com/ZXRB5IYBdhLWcg3wz6ed或者这个问题的已接受答案https://dev59.com/inA75IYBdhLWcg3w8-LZ#3010848。 - Matt
好的,感谢更新。那么如果我们不关心数组的顺序呢?这种情况仍然会被反对吗? - Sambhav Sharma
5
由于它列举了所有的属性,而不仅仅是数组元素,因此仍会受到抑制。我所链接的两篇文章更详细地解释了这一点。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接