I'm trying to create an array with 3 elements without using for loops, so the code will be a single line (or single statement). What I want to do is creating an array of 3 elements and each element should be random number from 0 to 255 (0 and 255 will be included).
let colors = new Array(3).map((v) => Math.floor(Math.random()*256));
But this code doesn't work, I guess it's because each element is undefined and .map array property can't map undefined elements. What's your suggestions?
I'm trying to create an array with 3 elements without using for loops, so the code will be a single line (or single statement). What I want to do is creating an array of 3 elements and each element should be random number from 0 to 255 (0 and 255 will be included).
let colors = new Array(3).map((v) => Math.floor(Math.random()*256));
But this code doesn't work, I guess it's because each element is undefined and .map array property can't map undefined elements. What's your suggestions?
Share Improve this question edited May 19, 2021 at 14:19 M. Çağlar TUFAN asked May 19, 2021 at 12:23 M. Çağlar TUFANM. Çağlar TUFAN 9201 gold badge10 silver badges23 bronze badges 2-
1
Is there a reason why you expect
new Array()
to create 3 elements? (I'm guessing you may have forgotten to add3
tonew Arrray(3)
and that you may be facing this issue?) – Nick Parsons Commented May 19, 2021 at 12:32 -
@NickParsons Oh, yeah. I forgot it. I have tried that with
new Array(3)
. – M. Çağlar TUFAN Commented May 19, 2021 at 14:19
6 Answers
Reset to default 7Array.from() is something you are looking for:
const res = Array.from({length: 3}, _ => Math.floor(Math.random()*256))
console.log(res)
You can try using Array.from()
specifying the array-like objects (objects with a length property and indexed elements) of the array as first parameter and the arrow function to fill the array with random values in that range as the second parameter:
let colors = Array.from({length: 3}, () => Math.floor(Math.random() * 256));
console.log(colors);
Without usage of Array.from
[0,0,0].map(() => Math.floor(Math.random() * 256))
One more ridiculous approach :) just for fun:
var result =
Math.floor(Math.random() * (Math.pow(2, 24) + 1)) // generate random number between zero and 2^24
.toString(2) // convert it to binary representation string
.padStart(24, '0') // ensure that length is 24
.match(/.{1,8}/g) // split digits to three groups of length 8
.map(i => parseInt(i, 2)) // parse it back
console.log(result)
- 2^24 will have 24 digits in binary representation, so we'll be able to split it in 3 groups of 8 digits each.
- padding is necessary to ensure amount of digits in a binary representation
Something less extensible but more straight-forward:
let colors = [Math.floor(Math.random()*256),Math.floor(Math.random()*256),Math.floor(Math.random()*256)];
console.log(colors)
You can use Array.from({length: 3}, () => Math.floor(Math.random() * 256));
Just follow this, you'll be fine!
const colors = Array.from({length: 5 }, () => Math.floor(Math.random()*256))
console.log(colors)