簡體   English   中英

在JavaScript中使用隨機數創建長度為n的數組

[英]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#applyArray#mapMath.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的博客

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/

簡短的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM