私が取得しようとしているランダムな配列から項目のを。
これは私がこれまで持っているものです。
私は、最小値と最大値を持つ(ロングコードの別の部分での)関数を呼び出しています:
generateitems(1,7)
そして、これは残りの部分は次のとおりです。
function generateitems(min, max) {
var myArray = ["aa","bb","cc","dd","ee","ff","gg"];
var randomItem = myArray[Math.floor(Math.random()* (max - min)) + min];
return randomItem;
}
私はちょうどその結果として一つのアイテムを取得しておきます。私はこれをどのように解決するのですか?
私は配列から1 /特定の量、またはすべてのアイテムを生成する方法を知っている、と私はそれを行うとき、私のプログラムは動作します - 私は私のコードの残りの部分で問題がないと思うので。私はちょうどここにMath.randomを使用する方法を見つけ出すことができない、またはそれは、この場合に使用するためにも、正しいことだ場合。
お時間をいただき、ありがとうございます。
EDIT:
たかっ結果:
関数は1-7の項目を返す必要があります
重複がOKです、私は、項目の順序を気にしません
あなたのコードでこの行に、あなたは、単一のエントリを持つ配列を生成しているためです。
var randomItem = myArray[Math.floor(Math.random()* (max - min)) + min];
あなたがアイテムの乱数を生成したい場合は、以下を行う必要があります。
- 使用する
min
とmax
ランダムな長さの配列を生成するために、値を - 配列が生成された後、あなたがして使用して、その中にランダムにアイテムをプッシュします
Array.prototype.map
。
あなたのオリジナルのロジックは欠陥があることに注意してください:あなたは、配列からランダムな要素を選択する場合。使用してmyArray[Math.floor(Math.random() * myArray.length]
動作するはずです。min
そしてmax
私はあなたのケースのための疑いがあるとして、のみを決定するために使用されるランダムに生成された配列の長さを。
function generateitems(min, max) {
var myArray = ["aa","bb","cc","dd","ee","ff","gg"];
var arrayLength = Math.floor(Math.random()* (max - min)) + min
return [...new Array(arrayLength)].map(function() {
return myArray[Math.floor(Math.random()* myArray.length)];
});
}
console.log(generateitems(1,7));
あなたは基本的にランダム(値の衝突の可能性ある手段)で、配列から項目を選択しているので、これはしかし、ユニークな配列を生成しません。
あなたがいる場合、既存のアレイのシャッフル/ランダム化されたサブセットを作成したい:、この答えは、最高のあなたのニーズに合う配列からランダムなサブセットをサンプリング