5 ms·
I'm a fan of `Array.from({ length: 1000 })`
by eins1234 6y ago
I'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
- momentoftop 6y agoOr if you want to avoid off-by-one errors, why not have a function: dotimes(n, () => button.click()) If anyone is in the habit of solving trivial constant space problems in linear space where n is expected to be over 100000, I don't know what to say to them. Are Javascript implementations pretty much guaranteed to optimise the array away?
- still_grokking 6y agoBecause let transformed = for(let i=0; i<n; ++i){something()}; doesn't work. For loops are just clunky. They're not values, you can't pass them around or copy'n'paste them where the transformed value is needed.
- eins1234 6y agoThis. Data and transformations on data (map, filter, reduce, etc) are trivially composable. Imperative loops are not (unless you abstract them away behind a function that accepts and returns data, in which case you'd be re-implementing map, filter, reduce with imperative loops).