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

新手上路,请多包涵

按照 这个创建指定长度数组的答案,我执行了下面的操作以获得相应的结果,但填充了随机数,而不是零。

 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]

原文由 Konrad Viltersten 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

我想知道是否有可能用单线获得正确的结果……

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

document.body.innerText = randoms;

原文由 7vujy0f0hy 发布,翻译遵循 CC BY-SA 4.0 许可协议

_Array#fill 是做什么的?_

根据 MDN

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

You can use Function#apply , Array#map , Math.floor() , Math.random() .

在ES6中,可以使用 Array#fromArrow函数

 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 的博客_create_an_array_of_n_size_and_populate_them_with_unique_values_of_the_same_prefix)

原文由 Tushar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题