[英]Creating array of length n with random numbers in JavaScript
按照这个答案创建一个指定长度的数组,我执行下面的操作得到一个相应的结果,但是用随机数填充,而不是零。
var randoms = Array(4).fill(Math.floor(Math.random() * 9));
好吧,从数学上讲它是随机的 ,好的。 但是我希望随机性在数组中可见,当然不仅仅是在运行之间。 愚蠢的电脑......不要做我说的话。 做我想要的!
我可以迭代并将其作为随机(和变化)值。 但我想知道,纯粹的好奇心,如果有可能通过单线,如上所述,MatLab风格得到正确的结果。 我需要调用eval(function()...)吗? 我听说过很多关于评估的坏事......
请注意,上面生成的代码如下:
[7,7,7,7]
[3,3,3,3]
等我想要的东西
[1,2,3,4]
[4,3,8,4]
Array#fill
做什么?
据MDN称
fill()
方法使用静态值将数组的所有元素从起始索引填充到结束索引。
您可以使用Function#apply
, Array#map
, Math.floor()
, Math.random()
。
在ES6中,可以使用Array#from
和Arrow函数 。
Array.from({length: 6}, () => Math.floor(Math.random() * 9));
Array.apply(null, Array(6)).map(() => Math.floor(Math.random() * 9));
var randomArr = Array.from({length: 6}, () => Math.floor(Math.random() * 9)); document.getElementById('result').innerHTML = JSON.stringify(randomArr, 0, 4); // For demo only
<pre id="result"></pre>
在ES5中:
Array.apply(null, Array(6)).map(function(item, index){
return Math.floor(Math.random() * 9);
});
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);
<pre id="result"></pre>
什么是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的博客
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]
简短的ES6方法 -
// randomly generated n = 4 length array 0 <= array[n] <= 9
var randoms = Array.from({length: 4}, () => Math.floor(Math.random() * 10));
请享用!
我想知道是否有可能通过单线程获得正确的结果......
var randoms = [...Array(4)].map(虚 => Math.floor(Math.random() * 9)); document.body.innerText = randoms;
`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]
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]
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));
...
来自大小随机唯一数字的解决方案
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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.