There are now four ways to open a for loop in javascript
For of
For await of
For in
Classic For
While they differ a bit on speed and the variables they declare implicitly, the actual body of the for loop doesn't change much between the different methods.
The easiest way to loop through an array is with the for…of loop
constfruits=['apple','banana','cherry']for(constfruitoffruits){console.log(fruit)}// apple// banana// cherry
We're not limited to arrays though, since all iterators work the same in javascript. That means we can just as easily loop through a string
for(constletterof"javascript"){console.log(letter)}// j// a// v// a// s// c// r// i// p// t
Many emojis are stored as multiple codepoints, and some emojis are created by joining multiple other emojis.
For…of will iterate over them one by return, returning every 👨 in a 👨👩👧👦
for(constpersonof"👨👩👧👦"){console.log(person)}// 👨// 👩// 👧// 👦
We can use thereturn
keyword to break out of a function early. In a loop, we can use thecontinue
keyword to break out of the current iteration and start the next iteration immediately.
constsequence=[0,1,2,3,4,5]for(constnumberofsequence){if(isOdd(number))continueconsole.log(number)}// 0// 2// 4
Loops also have thebreak
keyword, which will cancel not only the current iteration but also the rest of the loop
constsequence=[0,1,2,3,4,5]for(constnumberofsequence){if(number>=3)breakconsole.log(number)}// 0// 1// 2
At the end of every iteration, the current scope is discarded and a new one is opened, so it's ok to useconst
orlet
at the start
for(constitemofitems)// orfor(letitemofitems)
If you try to useawait
inside a loop, the execution will pause until the promise resolves and then it'll proceed as usual. To allow the loops to proceed concurrently, you can either await the promises before starting the loop or usingfor await of
to do the same thing
for(constxofawaitPromise.all(arrayOfPromises))// orforawait(constxofarrayOfPromises)
In javascript, objects are not strictly iterable. If you want to loop through the keys of an object, you can either usefor in
or convert the keys to an array
consthashMap={abcd:{…},abce:{…},abcf:{…},abcg:{…},abch:{…}}
for(constkeyofObject.keys(hashMap)){constvalue=hashMap[key]}// orfor(constkeyinhashMap){constvalue=hashMap[key]}
If the only thing we need the key for is to access the value, we can skip a step and loop through the values directly
for(constvalueofObject.values(hashMap){…}
If we need both key and value, my preferred method is to useObject.entries
, which returns a[key, value]
pair, and destructure them right in the head the loop
for(const[key,value]ofObject.entries(hashMap)){…}
Since arrays are just objects with numeric keys, we can use that same syntax to get the index of our array elements inside our loop
for(const[i,element]ofObject.entries(array)){…}
To run a loop a specific number of times, we can create an array with that many elements and then loop through it.
Iterators skip over empty array slots, so we need to fill it with at least undefined first, and then optionally map its index
constarray=Array(25).fill()// [ empty, empty, empty, …]// orconstarray=Array(25).fill().map((_,i)=>i)// [ 0, 1, 2, … ]for(constiofarray){…}
The other option is to use the classic for loop syntax. This gives you the most control at the cost of readability.
for(leti;i<25;i++){…}
Top comments(7)

- LocationThailand
- EducationYes
- Joined
jsperf.com/loop-vs-map-vs-foreach/22
So,map
and classical for loop. But it is usually more semantically to useforEach
rather thanmap
, albeit slow.
for loop
isn't so bad, but it depends on the use case.

- LocationToronto, ON
- WorkSenior Developer at Fintech
- Joined
I would absolutely consider this to be a matter of taste

- LocationThailand
- EducationYes
- Joined
I meantarr.forEach()
vsarr.map()
.
for of
andfor in
are another species, and is whether you want it to be functional or procedural. Neither is better than the others.

- LocationToronto, ON
- WorkSenior Developer at Fintech
- Joined
That depends what you're measuring
Most of the time a for loop takes up is spent doing logic on each iteration. The amount of time it takes to switch from the end of one iteration to another (which is the only way these differ) is microscopic in comparison.
Unless you're doing many thousands of iterations, performance is the wrong heuristic to help you decide
For further actions, you may consider blocking this person and/orreporting abuse