5 ms·
Is that actually the best way to do ranges on JS?
by skavi 6y ago
Is that actually the best way to do ranges on JS?
- halfmatthalfcat 6y agoTraditional for loops are probably the most common for ranges but if you want a more functional approach you can use the Array constructor or Array.prototype.from with its various parameters.
- franky47 6y agoThe functional approach also works better as a one-liner when typed in the devtools console.
- smoe 6y agoThe other comment points out Array.from, which seems pretty nifty. Have not seen it before. I would have used: for(i of Array(1000).keys()) { doSomething() } or [...Array(1000)].forEach(() => doSomething())
- vardaro 6y agowhy create the array? for(let i = 0; i < 1000; i++) button.click() wouldn’t be surprised if Javascript has some weird optimization under the hood!
- epse 6y agoIn this case, there's not much difference. In general, iterating over something rather than using a counter with limits makes it harder to create off by one or other errors due to laziness.
- eins1234 6y agoI'm a fan of `Array.from({ length: 1000 })`
- mahathu 6y agoam i missing something with this entire subthread? why not for(let i=0; i<n; ++i){something()};?
- xeromal 6y agoI guess they can argue they're introducing fewer variables. lol
- kbenson 6y agoI think it's mostly a stylistic choice, but getting in the habit pays dividends in that it makes it easy to do certain list related actions in a consistent way. forEach doesn't necessarily show this off well, but filter and map make it more obvious. E.g. // Get list of even squares of first 10 integers Array.from({ length: 10 }).map((e,i)=>i*i).filter((i)=>i%2==0).forEach((i)=>console.log(i)); // Or more readable Array.from({ length: 10 }) .map((e,i)=>i*i) // Get squares of each number .filter((i)=>i%2==0) // filter for evens .forEach((i)=>console.log(i)); // print Want to filter or manipulate the values in a different way? Throw in another map or filter. Want to pass complex values between steps? You can pack them into an array or object in a map and unpack later.[1] Once you're used to doing stuff with lists, you can use some other interesting list operations like reduce(), some(), every(), etc. It's not really better (it's subjective), it's just different and a lot of people are used to it and prefer it (and it's fairly consistent in nomenclature across some languages, which is a bonus). 1: https://en.wikipedia.org/wiki/Schwartzian_transform https://en.wikipedia.org/wiki/Schwartzian_transform
- topspin 6y agoDoesn't use enough memory perhaps.
- ficklepickle 6y agothere is no true scotsman [...Array(n)].map(something)
- vardaro 6y agothis is what i’m preaching
- antihero 6y agoI guess you could do `[...new Array(1000)].map((_,i) => i);` to create a sequence.