在JavaScript中使用随机数创建长度为n的数组

时间:2016-01-23 17:20:48

标签: javascript arrays random

继续this answer创建指定长度的数组,我执行了下面的操作来获得相应的结果,但是用随机数字填充,而不是零。

var randoms = Array(4).fill(Math.floor(Math.random() * 9));

好吧,从数学上说它是随机的,好吧。但是我希望随机性在数组中可见,当然不仅仅是在运行之间。愚蠢的电脑......不要做我说的话。做我想做的!

我可以迭代并将其放入随机(和变化)值。但我怀疑,纯粹的好奇心,如果有可能通过像MatLab这样的单线程获得正确的结果。我需要调用 eval(function()...)吗?我听说过关于 eval 的很多坏事......

请注意,上面的代码如下:

  

[7,7,7,7]
  [3,3,3,3]

等。虽然我想要像

这样的东西
  

[1,2,3,4]
  [4,3,8,4]

6 个答案:

答案 0 :(得分:20)

Array#fill做了什么?

根据MDN

  

fill()方法将所有数组的元素从起始索引填充到具有静态值的结束索引。

您可以使用Function#applyArray#mapMath.floor()Math.random()

在ES6中,可以使用Array#fromArrow function

Array.from({length: 6}, () => Math.floor(Math.random() * 9));

<击> Array.apply(null, Array(6)).map(() => Math.floor(Math.random() * 9));

&#13;
&#13;
var randomArr = Array.from({length: 6}, () => Math.floor(Math.random() * 9));

document.getElementById('result').innerHTML = JSON.stringify(randomArr, 0, 4); // For demo only
&#13;
<pre id="result"></pre>
&#13;
&#13;
&#13;

在ES5中:

Array.apply(null, Array(6)).map(function(item, index){
    return Math.floor(Math.random() * 9);
});

&#13;
&#13;
var randomArr = Array.apply(null, Array(6)).map(function(item, index){
    return Math.floor(Math.random() * 9)
});

document.getElementById('result').innerHTML = JSON.stringify(randomArr, 0, 4);
&#13;
<pre id="result"></pre>
&#13;
&#13;
&#13;

什么是Array.apply(null, Array(n))new Array(n)可以在这里使用吗?

上述代码都创建了包含六个元素的新数组,每个元素的值都为undefined。但是,使用new语法时,创建的数组不可迭代。要使数组可迭代,请使用Array.apply(null, Array(6))语法。

如果页面上包含lodash,则非常简单。

_.times(6, _.random.bind(0, 100))
        ^                        - Number of elements in array
                         ^       - Random number range min
                            ^^^  - Random number range max

注意:此答案的灵感来自Colin Toh's blog

答案 1 :(得分:6)

var randoms = Array(4).fill(Math.floor(Math.random() * 9));

这行代码将创建一个由4个相同数字组成的列表,因为fill只取一个值并在列表长度内重复它。你想要做的是每次运行随机数生成器:

var makeARandomNumber = function(){
    return Math.floor(Math.random() * 9);
}
var randoms = Array(5).fill(0).map(makeARandomNumber);
console.log(randoms)
// => [4, 4, 3, 2, 6]

https://jsfiddle.net/t4jtjcde/

答案 2 :(得分:3)

  

短而简单的ES6方法 -

// randomly generated n = 4 length array 0 <= array[n] <= 9
var randoms = Array.from({length: 4}, () => Math.floor(Math.random() * 10));
  

享受!

答案 3 :(得分:1)

  

我想知道是否有可能通过单线程获得正确的结果......

var randoms = [...Array(4)].map(虚 => Math.floor(Math.random() * 9));

document.body.innerText = randoms;

答案 4 :(得分:0)

`const t = Array.from({length:n},mapArrowFx);

1)const t10 = Array.from({length: 10}, (v, k) => k); [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2)const tEven = Array.from({length: 10}, (v, k) => 2*k); [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

........

3)

let n=100; const tRandom= Array.from({length: n}, (v, k) => Math.floor(Math.random()*n));

...

答案 5 :(得分:0)

来自Sized array of random unique numbers

的解决方案

const uniqRandomNumbers  = _.sampleSize(_.range(9), 4);
console.log(uniqRandomNumbers);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>