Перебрать массив в JavaScript - PullRequest
2802 голосов
/ 10 июня 2010

В Java вы можете использовать цикл for для обхода объектов в массиве следующим образом:

String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
    // Do something
}

Можете ли вы сделать то же самое в JavaScript?

Ответы [ 39 ]

6 голосов
/ 12 декабря 2015

Конечно, это неэффективно, и многие презирают его, но это один из самых близких к упомянутому:

var myStringArray = ["Hello","World"];
myStringArray.forEach(function(f){
    // Do something
})
5 голосов
/ 09 мая 2014

Ну как на счет этого:

for (var key in myStringArray) {
    console.log(myStringArray[key]);
}
5 голосов
/ 02 сентября 2017

Кажется, что перечислены все варианты, кроме forEach от lodash :

_.forEach([1, 2], (value) => {
  console.log(value);
});
5 голосов
/ 29 апреля 2016
var myStringArray = ["hello", "World"];
myStringArray.forEach(function(val, index){
   console.log(val, index);
})
4 голосов
/ 25 сентября 2018

Резюме:

При итерации по массиву мы часто хотим достичь одной из следующих целей:

  1. Создать новый массив, оставить исходный без изменений: используйте map()
  2. Выполните действие с / на каждом элементе массива и, возможно, измените массив: используйте for..of, forEach() или обычный цикл for

Примеры:

const arr1 = [1, 2, 3];

const arr2 = arr1.map(el => el * 2);

// with map we create a new arr2, arr1 is left untouched
console.log(arr2, arr1);


// regular for loop
for (let i = 0; i < arr1.length; i++) {
  console.log(arr1[i]);
}

console.log('\n');

// for of loop
for (let el of arr1) {
  console.log(el);

}

console.log('\n');


// forEach()
arr1.forEach(el => {
  console.log(el)
})

Какой использовать?

В большинстве случаев это не так важно. Однако есть некоторые крайние случаи, когда один тип итерации может быть более подходящим для ваших нужд:

  1. Если вы хотите манипулировать массивом, но оставить старый массив нетронутым (например, функциональное программирование), вы можете лучше всего использовать map() для итерации. Если вам не нужно возвращать новый массив, не используйте map(). map() имеет самую низкую производительность среди всех циклических методов.
  2. Когда производительность играет роль, когда вам нужно многократно повторять, обычный цикл for:

for(let i=0; i < arr.length; i++) {}

часто имеет (может отличаться из-за различий в движке JS) лучшую производительность, потому что это самая итеративная форма итерации.

4 голосов
/ 31 марта 2016

Лучше использовать последовательный цикл for:

for (var i = 0; i < myStringArray.length; i++) {
    // Do something
}
3 голосов
/ 26 мая 2016
var obj = ["one","two","three"];

for(x in obj){
    console.log(obj[x]);
}
1 голос
/ 09 октября 2018

var array = ['hai', 'hello', 'how', 'are', 'you']
$(document).ready(function () {
  $('#clickButton').click(function () {
    for (var i = 0; i < array.length; i++) {
      alert(array[i])
    }
  })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<input id="clickButton" value="click Me" type="button"/>
<div id="show"></div>
0 голосов
/ 12 января 2019

Рекурсивно циклически проходить по массиву следует избегать, поскольку это может вызвать переполнение стека. Различные браузеры также имеют разные размеры стека.

const data = ['one', 'two', 'three']

const loop = (items, index=0) => {
  if (items.length === index) {
    return;
  }
  console.log(items[index], index)
  loop(items, index+=1)
}

loop(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...