最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - JS creating an array of 3 elements containing random number from 0 to 255 (included) in single line of code - Stack

programmeradmin0浏览0评论

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 add 3 to new 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
Add a ment  | 

6 Answers 6

Reset to default 7

Array.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)

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论