web-dev-qa-db-ja.com

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]

17

ワンライナーで正しい結果が得られるかな?.

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

document.body.innerText = randoms;
4
7vujy0f0hy

_Array#fill_ は何をしますか?

MDNによると

fill()メソッドは、開始インデックスから終了インデックスまでの配列の要素に静的な値を入力しますall

_Function#apply__Array#map_Math.floor()Math.random()

ES6では、 _Array#from_ および 矢印関数 を使用できます。

_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)を使用できますか?

上記のコードはどちらも、6つの要素の新しい配列を作成します。各要素の値は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のブログ

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

このコード行は、fillが単一の値を取り、リストの長さにわたって繰り返すため、同じ数の4のリストを作成します。あなたがしたいことは毎回乱数ジェネレータを実行することです:

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/

6
Conrad.Dean

短くてシンプルなES6アプローチ-

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

楽しい!

4
simonbor

`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));

...

0
user3008938

解決策 ランダムな一意の数値のサイズ配列

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>
0
Ramzan Chasygov