How to iterate through arrays in JavaScript using for loops?
In Java, you can use an enhanced for loop to traverse objects in an array:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray) {
// Do something
}
What are the equivalent methods for looping through arrays in JavaScript, and how do they compare to Java’s enhanced for loop?
JavaScript offers several ways to iterate through arrays, with the for...of loop being the closest equivalent to Java’s enhanced for loop for simple iteration. You can also use array methods like forEach(), map(), and filter(), or traditional for loops for more control and performance-critical scenarios.
Contents
- JavaScript Array Iteration Methods Overview
- for…of Loop - Closest to Java’s Enhanced For Loop
- Traditional for Loop - Index-Based Iteration
- Array Methods: forEach, map, filter, and reduce
- Performance Comparison: Traditional vs Modern Methods
- When to Use Each Method
- Code Examples: JavaScript vs Java
JavaScript Array Iteration Methods Overview
JavaScript provides multiple approaches for array iteration, each with different characteristics and use cases. Unlike Java’s enhanced for loop, JavaScript offers both traditional looping constructs and functional array methods that can be chained together.
The main iteration approaches in JavaScript include:
for...ofloop - Modern syntax for iterating over iterable objects- Traditional
forloop - Index-based iteration with full control forEach()method - Functional approach for side effectsmap()method - Creates new array by transforming elementsfilter()method - Creates new array with filtered elementsreduce()method - Reduces array to single valuefor...inloop - For iterating object properties (should be avoided for arrays)
Each method serves different purposes and has different performance characteristics, making it important to choose the right one for your specific use case.
for…of Loop - Closest to Java’s Enhanced For Loop
The for...of loop introduced in ES6 is the most direct equivalent to Java’s enhanced for loop. It provides a clean, modern syntax for iterating over array elements without dealing with indices.
const myStringArray = ["Hello", "World"];
for (const s of myStringArray) {
// Do something with each element
console.log(s);
}
Key characteristics of for...of:
- Iterates over actual array elements, not indices
- Cleaner syntax than traditional for loops
- Works with all iterable objects (arrays, strings, Map, Set, etc.)
- Does not provide index access (unlike traditional for loops)
- Cannot be used for early exit conditions
According to the Mozilla Developer Network, the for...of loop is the preferred modern approach for array iteration when you don’t need index access or early termination.
Traditional for Loop - Index-Based Iteration
The traditional for loop provides the most control over array iteration, including index access and custom iteration conditions.
const myStringArray = ["Hello", "World"];
for (let i = 0; i < myStringArray.length; i++) {
// Do something with each element and its index
console.log(`Index: ${i}, Value: ${myStringArray[i]}`);
}
Key characteristics of traditional for loops:
- Full control over iteration (start, end, step)
- Access to both indices and values
- Can implement early exit conditions using
break - Can modify array elements during iteration
- Generally faster than functional methods
As noted in the research, it is better to use a traditional for loop with a numeric index when iterating over arrays for performance-critical code, especially when you need index access or early exit conditions.
Array Methods: forEach, map, filter, and reduce
JavaScript’s array methods provide functional programming approaches to iteration. These methods are particularly useful when working with arrays in a functional style.
forEach()
The forEach() method executes a function for each array element:
const myStringArray = ["Hello", "World"];
myStringArray.forEach((s, index) => {
console.log(`Index: ${index}, Value: ${s}`);
});
Key characteristics of forEach():
- Executes a function for each element
- Returns
undefined(not chainable) - Provides both element and index
- Cannot break out of the loop early
- Useful for side effects (modifying external variables, API calls, etc.)
map()
The map() method creates a new array by transforming each element:
const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(n => n * 2);
// doubledNumbers: [2, 4, 6, 8]
Key characteristics of map():
- Creates a new array (doesn’t modify original)
- Returns the new array (chainable)
- Perfect for data transformation
- Cannot break out early
- More memory-intensive than
forEach()
filter()
The filter() method creates a new array with elements that pass a test:
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(n => n % 2 === 0);
// evenNumbers: [2, 4]
Key characteristics of filter():
- Creates new array with filtered elements
- Returns boolean from callback function
- Useful for data selection
- Chainable with other array methods
- Doesn’t modify original array
reduce()
The reduce() method reduces an array to a single value:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((accumulator, current) => accumulator + current, 0);
// sum: 10
Key characteristics of reduce():
- Reduces array to single value
- Takes an initial value as second parameter
- Accumulator pattern for complex operations
- Most powerful but also most complex
Performance Comparison: Traditional vs Modern Methods
Performance varies significantly between different iteration methods in JavaScript:
| Method | Performance | Best For |
|---|---|---|
| Traditional for loop | Fastest | Performance-critical code, index access |
| for…of loop | Slightly slower than traditional for | Clean iteration without index access |
| forEach() | About twice as fast as chaining | Side effects, clean iteration |
| Chained methods (map + filter) | Slowest | Functional programming pipelines |
According to research from Go Make Things, forEach() for multi-step manipulation is about twice as fast as chaining methods like filter() and map(). These results were consistent across Chrome, Firefox, and Safari.
For performance-critical applications, traditional for loops remain the fastest option, while modern methods like for...of provide good performance with cleaner syntax.
When to Use Each Method
Choosing the right iteration method depends on your specific requirements:
Use for...of when:
- You want clean, modern syntax similar to Java’s enhanced for loop
- You don’t need index access
- You’re iterating over any iterable object (not just arrays)
- You value readability over maximum performance
Use traditional for loop when:
- Performance is critical
- You need index access
- You require early exit conditions
- You need to modify array elements during iteration
- You have complex iteration logic
Use forEach() when:
- You want functional iteration syntax
- You need both element and index
- You’re performing side effects (API calls, DOM updates)
- You don’t need to create a new array
Use map() when:
- You need to transform array elements
- You want to create a new array
- You’re building functional pipelines
Use filter() when:
- You need to select elements based on conditions
- You want to create a filtered version of an array
Use reduce() when:
- You need to reduce an array to a single value
- You’re performing complex aggregation operations
Code Examples: JavaScript vs Java
Basic Array Iteration
Java:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray) {
System.out.println(s);
}
JavaScript equivalent:
const myStringArray = ["Hello", "World"];
for (const s of myStringArray) {
console.log(s);
}
Iteration with Index Access
Java:
String[] myStringArray = {"Hello", "World"};
for (int i = 0; i < myStringArray.length; i++) {
System.out.println("Index: " + i + ", Value: " + myStringArray[i]);
}
JavaScript equivalent:
const myStringArray = ["Hello", "World"];
for (let i = 0; i < myStringArray.length; i++) {
console.log(`Index: ${i}, Value: ${myStringArray[i]}`);
}
Functional Iteration with Transformation
Java (using streams):
String[] myStringArray = {"Hello", "World"};
Arrays.stream(myStringArray)
.map(String::toUpperCase)
.forEach(System.out::println);
JavaScript equivalent:
const myStringArray = ["Hello", "World"];
myStringArray
.map(s => s.toUpperCase())
.forEach(s => console.log(s));
Filtering Elements
Java (using streams):
Integer[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
.filter(n -> n % 2 === 0)
.forEach(System.out::println);
JavaScript equivalent:
const numbers = [1, 2, 3, 4, 5];
numbers
.filter(n => n % 2 === 0)
.forEach(n => console.log(n));
Conclusion
JavaScript offers multiple ways to iterate through arrays, each with distinct advantages compared to Java’s enhanced for loop. The for...of loop provides the most direct equivalent with clean syntax, while traditional for loops offer maximum performance and control. Functional array methods like forEach(), map(), and filter() enable powerful functional programming patterns.
Key takeaways:
- Use
for...offor simple iteration similar to Java’s enhanced for loop - Choose traditional
forloops for performance-critical code or when you need index access - Prefer array methods for functional programming pipelines and data transformation
- Consider performance implications when chaining multiple array methods
- Avoid
for...infor array iteration due to prototype property issues
The best choice depends on your specific requirements for performance, readability, and functionality. Modern JavaScript development often favors functional methods for their expressiveness, while performance-sensitive scenarios may still benefit from traditional loops.
Sources
- Loops and iteration - JavaScript | MDN
- Does Javascript have an enhanced for loop syntax similar to Java’s - Stack Overflow
- Difference between forEach and for loop in Javascript - GeeksforGeeks
- Which type of loop is fastest in JavaScript? - Plain English
- Foreach loop - Wikipedia
- Looping vs Iteration in Javascript: A Beginners Guide to Navigating Both - Geek Culture
- Comparing the Performance of Different Loop Techniques in JavaScript/TypeScript - Robin Viktorsson
- Comparing JS iteration methods (map, filter, forEach, reduce + loops) - DEV Community
- How performant are modern array methods vs old-school for loops in vanilla JS? - Go Make Things
- Map vs forEach - DEV Community