跟进 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]
最佳答案
什么是Array#fill
做什么?
根据 MDN
The
fill()
method fills all the elements of an array from a start index to an end index with a static value.
您可以使用 Function#apply
, Array#map
, Math.floor()
, Math.random()
.
在 ES6 中,Array#from
和 Arrow function可以使用。
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's blog
关于javascript - 在 JavaScript 中用随机数创建长度为 n 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34966459/