Three main options:

  1. for (var i = 0; i < xs.length; i++) { console.log(xs[i]); }
  2. xs.forEach((x, i) => console.log(x));
  3. for (const x of xs) { console.log(x); }

Detailed examples are below.


1. Sequential for loop:

var myStringArray = ["Hello","World"];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++) {
    console.log(myStringArray[i]);
    //Do something
}

Pros

  • Works on every environment
  • You can use break and continue flow control statements

Cons

  • Too verbose
  • Imperative
  • Easy to have off-by-one errors (sometimes also called a fence post error)

2. Array.prototype.forEach:

The ES5 specification introduced a lot of beneficial array methods. One of them, the Array.prototype.forEach, gave us a concise way to iterate over an array:

const array = ["one", "two", "three"]
array.forEach(function (item, index) {
  console.log(item, index);
});

Being almost ten years as the time of writing that the ES5 specification was released (Dec. 2009), it has been implemented by nearly all modern engines in the desktop, server, and mobile environments, so it's safe to use them.

And with the ES6 arrow function syntax, it's even more succinct:

array.forEach(item => console.log(item));

Arrow functions are also widely implemented unless you plan to support ancient platforms (e.g., Internet Explorer 11); you are also safe to go.

Pros

  • Very short and succinct.
  • Declarative

Cons

  • Cannot use break / continue

Normally, you can replace the need to break out of imperative loops by filtering the array elements before iterating them, for example:

array.filter(item => item.condition < 10)
     .forEach(item => console.log(item))

Keep in mind if you are iterating an array to build another array from it, you should use map. I've seen this anti-pattern so many times.

Anti-pattern:

const numbers = [1,2,3,4,5], doubled = [];

numbers.forEach((n, i) => { doubled[i] = n * 2 });

Proper use case of map:

const numbers = [1,2,3,4,5];
const doubled = numbers.map(n => n * 2);

console.log(doubled);

Also, if you are trying to reduce the array to a value, for example, you want to sum an array of numbers, you should use the reduce method.

Anti-pattern:

const numbers = [1,2,3,4,5];
const sum = 0;
numbers.forEach(num => { sum += num });

Proper use of reduce:

const numbers = [1,2,3,4,5];
const sum = numbers.reduce((total, n) => total + n, 0);

console.log(sum);

3. ES6 for-of statement:

The ES6 standard introduces the concept of iterable objects and defines a new construct for traversing data, the for...of statement.

This statement works for any kind of iterable object and also for generators (any object that has a \[Symbol.iterator\] property).

Array objects are by definition built-in iterables in ES6, so you can use this statement on them:

let colors = ['red', 'green', 'blue'];
for (const color of colors){
    console.log(color);
}

Pros

  • It can iterate over a large variety of objects.
  • Can use normal flow control statements (break / continue).
  • Useful to iterate serially asynchronous values.

Cons

  • If you are targeting older browsers, the transpiled output might surprise you.

Do not use for...in

@zipcodeman suggests the use of the for...in statement, but for iterating arrays for-in should be avoided, that statement is meant to enumerate object properties.

It shouldn't be used for array-like objects because:

  • The order of iteration is not guaranteed; the array indexes may not be visited in numeric order.
  • Inherited properties are also enumerated.

The second point is that it can give you a lot of problems, for example, if you extend the Array.prototype object to include a method there, that property will also be enumerated.

For example:

Array.prototype.foo = "foo!";
var array = ['a', 'b', 'c'];

for (var i in array) {
    console.log(array[i]);
}

The above code will console log "a", "b", "c", and "foo!".

That can be particularly a problem if you use some library that relies heavily on native prototypes augmentation (such as MooTools).

The for-in statement, as I said before, is there to enumerate object properties, for example:

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])
    }
}

In the above example, the hasOwnProperty method allows you to enumerate only own properties. That's it, only the properties that the object physically has, no inherited properties.

I would recommend you to read the following article:

  • Enumeration VS Iteration
Answer from Christian C. Salvadó on Stack Overflow
🌐
Alma Better
almabetter.com › bytes › tutorials › javascript › array-iteration-in-javascript
Array Iteration in JavaScript
November 24, 2024 - Learn how to efficiently perform Array Iteration in JavaScript using methods like for, forEach, map, filter and more. Master Array Iteration in JavaScript today
Top answer
1 of 16
5292

Three main options:

  1. for (var i = 0; i < xs.length; i++) { console.log(xs[i]); }
  2. xs.forEach((x, i) => console.log(x));
  3. for (const x of xs) { console.log(x); }

Detailed examples are below.


1. Sequential for loop:

var myStringArray = ["Hello","World"];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++) {
    console.log(myStringArray[i]);
    //Do something
}

Pros

  • Works on every environment
  • You can use break and continue flow control statements

Cons

  • Too verbose
  • Imperative
  • Easy to have off-by-one errors (sometimes also called a fence post error)

2. Array.prototype.forEach:

The ES5 specification introduced a lot of beneficial array methods. One of them, the Array.prototype.forEach, gave us a concise way to iterate over an array:

const array = ["one", "two", "three"]
array.forEach(function (item, index) {
  console.log(item, index);
});

Being almost ten years as the time of writing that the ES5 specification was released (Dec. 2009), it has been implemented by nearly all modern engines in the desktop, server, and mobile environments, so it's safe to use them.

And with the ES6 arrow function syntax, it's even more succinct:

array.forEach(item => console.log(item));

Arrow functions are also widely implemented unless you plan to support ancient platforms (e.g., Internet Explorer 11); you are also safe to go.

Pros

  • Very short and succinct.
  • Declarative

Cons

  • Cannot use break / continue

Normally, you can replace the need to break out of imperative loops by filtering the array elements before iterating them, for example:

array.filter(item => item.condition < 10)
     .forEach(item => console.log(item))

Keep in mind if you are iterating an array to build another array from it, you should use map. I've seen this anti-pattern so many times.

Anti-pattern:

const numbers = [1,2,3,4,5], doubled = [];

numbers.forEach((n, i) => { doubled[i] = n * 2 });

Proper use case of map:

const numbers = [1,2,3,4,5];
const doubled = numbers.map(n => n * 2);

console.log(doubled);

Also, if you are trying to reduce the array to a value, for example, you want to sum an array of numbers, you should use the reduce method.

Anti-pattern:

const numbers = [1,2,3,4,5];
const sum = 0;
numbers.forEach(num => { sum += num });

Proper use of reduce:

const numbers = [1,2,3,4,5];
const sum = numbers.reduce((total, n) => total + n, 0);

console.log(sum);

3. ES6 for-of statement:

The ES6 standard introduces the concept of iterable objects and defines a new construct for traversing data, the for...of statement.

This statement works for any kind of iterable object and also for generators (any object that has a \[Symbol.iterator\] property).

Array objects are by definition built-in iterables in ES6, so you can use this statement on them:

let colors = ['red', 'green', 'blue'];
for (const color of colors){
    console.log(color);
}

Pros

  • It can iterate over a large variety of objects.
  • Can use normal flow control statements (break / continue).
  • Useful to iterate serially asynchronous values.

Cons

  • If you are targeting older browsers, the transpiled output might surprise you.

Do not use for...in

@zipcodeman suggests the use of the for...in statement, but for iterating arrays for-in should be avoided, that statement is meant to enumerate object properties.

It shouldn't be used for array-like objects because:

  • The order of iteration is not guaranteed; the array indexes may not be visited in numeric order.
  • Inherited properties are also enumerated.

The second point is that it can give you a lot of problems, for example, if you extend the Array.prototype object to include a method there, that property will also be enumerated.

For example:

Array.prototype.foo = "foo!";
var array = ['a', 'b', 'c'];

for (var i in array) {
    console.log(array[i]);
}

The above code will console log "a", "b", "c", and "foo!".

That can be particularly a problem if you use some library that relies heavily on native prototypes augmentation (such as MooTools).

The for-in statement, as I said before, is there to enumerate object properties, for example:

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])
    }
}

In the above example, the hasOwnProperty method allows you to enumerate only own properties. That's it, only the properties that the object physically has, no inherited properties.

I would recommend you to read the following article:

  • Enumeration VS Iteration
2 of 16
1210

Yes, assuming your implementation includes the for...of feature introduced in ECMAScript 2015 (the "Harmony" release)... which is a pretty safe assumption these days.

It works like this:

// REQUIRES ECMASCRIPT 2015+
var s, myStringArray = ["Hello", "World"];
for (s of myStringArray) {
  // ... do something with s ...
}

Or better yet, since ECMAScript 2015 also provides block-scoped variables:

// REQUIRES ECMASCRIPT 2015+
const myStringArray = ["Hello", "World"];
for (const s of myStringArray) {
  // ... do something with s ...
}
// s is no longer defined here

(The variable s is different on each iteration, but can still be declared const inside the loop body as long as it isn't modified there.)

A note on sparse arrays: an array in JavaScript may not actually store as many items as reported by its length; that number is simply one greater than the highest index at which a value is stored. If the array holds fewer elements than indicated by its length, its said to be sparse. For example, it's perfectly legitimate to have an array with items only at indexes 3, 12, and 247; the length of such an array is 248, though it is only actually storing 3 values. If you try to access an item at any other index, the array will appear to have the undefined value there, but the array is nonetheless is distinct from one that actually has undefined values stored. You can see this difference in a number of ways, for example in the way the Node REPL displays arrays:

> a              // array with only one item, at index 12
[ <12 empty items>, 1 ]
> a[0]           // appears to have undefined at index 0
undefined
> a[0]=undefined // but if we put an actual undefined there
undefined
> a              // it now looks like this
[ undefined, <11 empty items>, 1 ]

So when you want to "loop through" an array, you have a question to answer: do you want to loop over the full range indicated by its length and process undefineds for any missing elements, or do you only want to process the elements actually present? There are plenty of applications for both approaches; it just depends on what you're using the array for.

If you iterate over an array with for..of, the body of the loop is executed length times, and the loop control variable is set to undefined for any items not actually present in the array. Depending on the details of your "do something with" code, that behavior may be what you want, but if not, you should use a different approach.

Of course, some developers have no choice but to use a different approach anyway, because for whatever reason they're targeting a version of JavaScript that doesn't yet support for...of.

As long as your JavaScript implementation is compliant with the previous edition of the ECMAScript specification (which rules out, for example, versions of Internet Explorer before 9), then you can use the Array#forEach iterator method instead of a loop. In that case, you pass a function to be called on each item in the array:

var myStringArray = [ "Hello", "World" ];
myStringArray.forEach( function(s) { 
     // ... do something with s ...
} );

You can of course use an arrow function if your implementation supports ES6+:

myStringArray.forEach( s => { 
     // ... do something with s ...
} );

Unlike for...of, .forEach only calls the function for elements that are actually present in the array. If passed our hypothetical array with three elements and a length of 248, it will only call the function three times, not 248 times. If this is how you want to handle sparse arrays, .forEach may be the way to go even if your interpreter supports for...of.

The final option, which works in all versions of JavaScript, is an explicit counting loop. You simply count from 0 up to one less than the length and use the counter as an index. The basic loop looks like this:

var i, s, myStringArray = [ "Hello", "World" ], len = myStringArray.length;
for (i=0; i<len; ++i) {
  s = myStringArray[i];
  // ... do something with s ...
}

One advantage of this approach is that you can choose how to handle sparse arrays. The above code will run the body of the loop the full length times, with s set to undefined for any missing elements, just like for..of; if you instead want to handle only the actually-present elements of a sparse array, like .forEach, you can add a simple in test on the index:

var i, s, myStringArray = [ "Hello", "World" ], len = myStringArray.length;
for (i=0; i<len; ++i) {
  if (i in myStringArray) {
    s = myStringArray[i];
    // ... do something with s ...
  }
}

Depending on your implementation's optimizations, assigning the length value to the local variable (as opposed to including the full myStringArray.length expression in the loop condition) can make a significant difference in performance since it skips a property lookup each time through. You may see the length caching done in the loop initialization clause, like this:

var i, len, myStringArray = [ "Hello", "World" ];
for (len = myStringArray.length, i=0; i<len; ++i) {

The explicit counting loop also means you have access to the index of each value, should you want it. The index is also passed as an extra parameter to the function you pass to forEach, so you can access it that way as well:

myStringArray.forEach( (s,i) => {
   // ... do something with s and i ...
});

for...of doesn't give you the index associated with each object, but as long as the object you're iterating over is actually an instance of Array (and not one of the other iterable types for..of works on), you can use the Array#entries method to change it to an array of [index, item] pairs, and then iterate over that:

for (const [i, s] of myStringArray.entries()) {
  // ... do something with s and i ...
}

The for...in syntax mentioned by others is for looping over an object's properties; since an Array in JavaScript is just an object with numeric property names (and an automatically-updated length property), you can theoretically loop over an Array with it. But the problem is that it doesn't restrict itself to the numeric property values (remember that even methods are actually just properties whose value is a closure), nor is it guaranteed to iterate over those in numeric order. Therefore, the for...in syntax should not be used for looping through Arrays.

Discussions

How to loop through an array in JavaScript
The for loop is the traditional approach to iteration since it grants programmers full control over loop execution. The array structure functions best to access elements through their position or to change their positions. The alternative approach of the forEach() method enables users to perform callback functions on array ... More on mindstick.com
🌐 mindstick.com
0
March 25, 2025
Basic Data Structures - Iterate Through All an Array's Items Using For Loops
Tell us what’s happening: I m very new to problem-solving and I am stuck on the first one. so the question asks to check if the set of nested arrays got the value passed in an element. Following is my code which isn’t right because I don’t know yet how to access each nested element or ... More on forum.freecodecamp.org
🌐 forum.freecodecamp.org
1
0
September 18, 2022
How to iterate through JavaScript array elements
I’m working on a JavaScript project and need to go through every item in my array. I’ve seen different ways to do this but I’m not sure which approach is best. Can someone show me the proper methods to iterate over array elements? I want to access each value in the array and perform some ... More on community.latenode.com
🌐 community.latenode.com
0
0
June 10, 2025
Loop through big array in JS
100k elements is not a big number, JS is pretty fast. Benchmark code: Gist Results on Node 18 LTS: Running "Loop through array of 100k numbers" suite... Progress: 100% for: 931 ops/s, ±0.82% | 1.9% slower for..of: 879 ops/s, ±0.27% | 7.38% slower forEach: 476 ops/s, ±0.30% | slowest, 49.84% slower reduce: 641 ops/s, ±0.16% | 32.46% slower while: 949 ops/s, ±0.19% | fastest Finished 5 cases! Fastest: while Slowest: forEach Results for Node 19 (current): Running "Loop through array of 100k numbers" suite... Progress: 100% for: 920 ops/s, ±0.59% | 22.1% slower for..of: 848 ops/s, ±0.38% | 28.2% slower forEach: 474 ops/s, ±0.25% | slowest, 59.86% slower reduce: 1 181 ops/s, ±17.27% | fastest while: 918 ops/s, ±0.44% | 22.27% slower Finished 5 cases! Fastest: reduce Slowest: forEach As you can see, all the result are of the same order of magnitude, and run through the entire array hundreds times a second on may old laptop. They also differ for different engines, and different versions of the same engines. Use whatever is more readable in your case. Any of these should be fine for most cases. More on reddit.com
🌐 r/learnjavascript
2
3
January 13, 2023
🌐
Hyperskill
hyperskill.org › university › javascript › javascript-array-iteration
JavaScript Array Iteration
September 24, 2024 - Array iteration refers to accessing each element in an array to perform actions on them. JavaScript provides various loop mechanisms, such as for...in, for...of, and forEach().
🌐
W3Schools
w3schools.com › js › js_array_iteration.asp
JavaScript Array Iteration
Array iteration methods operate on every array item. Complete JavaScript Array Reference · Array Tutorial · Array Basic Methods · Array Search Methods · Array Sort Methods · Array Iteration Methods · Array Reference · The forEach() method calls a function (a callback function) once for each array element.
🌐
MindStick
mindstick.com › forum › 161336 › how-to-loop-through-an-array-in-javascript
How to loop through an array in JavaScript – MindStick
March 25, 2025 - The process of traversing arrays in JavaScript forms the core mechanism for handling data efficiently. The array iteration capabilities of JavaScript consist of for loops and forEach(), for...of and map() methods, which serve different functions.
🌐
Flexiple
flexiple.com › javascript › javascript-loop-array
How to Loop Through an Array in JavaScript – JS Iterate Tutorial - Flexiple
Why Loop Through an Array?How to Loop Through an Array in JSCommon Methods to Iterate Through Arrays:Using the for LoopUsing the forEach MethodUsing a for...of LoopUsing a for...in Loop (Not Recommended for Arrays)Using the map MethodUsing the filter MethodUsing the reduce MethodConclusion ... Looping through an array in JavaScript provides a methodical way to access and manipulate each element within the array.
Find elsewhere
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Global_Objects › Array › forEach
Array.prototype.forEach() - JavaScript | MDN
The forEach() method is an iterative method. It calls a provided callbackFn function once for each element in an array in ascending-index order. Unlike map(), forEach() always returns undefined and is not chainable. The typical use case is to execute side effects at the end of a chain.
🌐
freeCodeCamp
forum.freecodecamp.org › javascript
Basic Data Structures - Iterate Through All an Array's Items Using For Loops - JavaScript - The freeCodeCamp Forum
September 18, 2022 - Tell us what’s happening: I m very new to problem-solving and I am stuck on the first one. so the question asks to check if the set of nested arrays got the value passed in an element. Following is my code which isn’t r…
🌐
Medium
dinushansriskandaraja.medium.com › the-fastest-way-to-loop-through-arrays-in-javascript-a-performance-comparison-4aa0534aaac4
The Fastest Way to Loop Through Arrays in JavaScript — A Performance Comparison | by Dinushan Sriskandaraja | Medium
March 29, 2025 - Looping through arrays is one of the most common operations in JavaScript. However, not all looping methods are created equal — some are significantly faster and more efficient than others. In this article, we’ll explore the most common ways to iterate over an array, compare their performance, ...
🌐
Medium
medium.com › @jacquiedesrosiers › mastering-javascript-5-ways-to-loop-through-an-array-6ed1b58f55d4
Mastering JavaScript: 5 Ways to Loop Through an Array | by jacquie d.r. | Medium
May 13, 2023 - This built-in method is forEach, which is an iterative method that takes a callback function as its argument and invokes the callback as many times as there are elements in the array (unless the array is mutated in the callback, which we’ll ...
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Statements › for...of
for...of - JavaScript | MDN
The for...of statement executes a loop that operates on a sequence of values sourced from an iterable object. Iterable objects include instances of built-ins such as Array, String, TypedArray, Map, Set, NodeList (and other DOM collections), as well as the arguments object, generators produced ...
🌐
Latenode
community.latenode.com › other questions › javascript
How to iterate through JavaScript array elements - JavaScript - Latenode Official Community
June 10, 2025 - I’m working on a JavaScript project and need to go through every item in my array. I’ve seen different ways to do this but I’m not sure which approach is best. Can someone show me the proper methods to iterate over array elements? I want to access each value in the array and perform some ...
🌐
Scrimba
scrimba.com › s04onk8
How to Iterate Through an Array in JavaScript
April 18, 2023 - Scrimba is the fast way of learning to code! Our interactive courses and tutorials will teach you React, Vue, Angular, Web Development, Node.JS, JavaScript, HTML, CSS, and more.
🌐
DEV Community
dev.to › askyt › how-to-loop-through-an-array-with-a-foreach-loop-in-javascript-1bk4
How to Loop Through an Array with a forEach Loop in JavaScript - DEV Community
January 20, 2025 - Inside the loop, we log the value ... } ... Inside the loop, we log scores[i] for each index. ... The for...in loop iterates over the indices (keys) of the array....
🌐
Reddit
reddit.com › r/learnjavascript › loop through big array in js
r/learnjavascript on Reddit: Loop through big array in JS
January 13, 2023 -

Let's say I have a big data array filled with numbers. Like 100 000 of them.

Which is the best way to "loop through" the entire object?

I've been reading about multithreading, web workers and so on. Also if I should use .reduce instead of for-loops with bigger data.

Is those the best ways to go, theoretically?

for now I use a for loop like this:

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

// Do stuff

}

... But I don't think it's the best solution

🌐
freeCodeCamp
freecodecamp.org › news › how-to-loop-through-an-array-in-javascript-js-iterate-tutorial
How to Loop Through an Array in JavaScript – JS Iterate Tutorial
November 7, 2024 - We don't need to initialize the index first when using the for loop method because the initialization, condition, and iteration are all handled in the bracket, as shown below: for (let i = 0; i < scores.length; i++) { console.log(scores[i]); } This will return all the elements as other methods have done: ... The for…in loop is an easier way to loop through arrays as it gives us the key which we can now use to get the values from our array this way:
🌐
GravityDevOps
gravitydevops.com › how-to-loop-through-an-array-in-javascript
How to Loop Through an Array in JavaScript – JS Iterate Tutorial - GravityDevOps
November 23, 2024 - An array is a single variable that holds elements of different data types, allowing them to be accessed using one reference.
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Global_Objects › Array
Array - JavaScript | MDN
February 24, 2026 - Returns a new array iterator object that contains the values for each index in the array. ... Returns a new array with the element at the given index replaced with the given value, without modifying the original array. ... An alias for the values() method by default. This section provides some examples of common array operations in JavaScript...
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Global_Objects › Array › Symbol.iterator
Array.prototype[Symbol.iterator]() - JavaScript | MDN
The [Symbol.iterator]() method of Array instances implements the iterable protocol and allows arrays to be consumed by most syntaxes expecting iterables, such as the spread syntax and for...of loops. It returns an array iterator object that yields the value of each index in the array.