2017-10-06 16 views

答えて

2
var array = ["cat", "dog"]; 
var maxRepeat = 10; 
var occObj= {}; 


for(var i = 0; i < array.length * maxRepeat; i++){ 
    var occ = array[Math.floor(Math.random() * array.length)]; 

    if(occObj[occ]){ 
     if(occObj[occ].count < maxRepeat){ 
      occObj[occ].count++; 
      console.log(occ); 
     }else{ 
      i--; //if the particular value was displayed "maxRepeat" times already, we need to make sure we run the loop again 
     } 
    }else{ 
     occObj[occ] = {} 
     occObj[occ].count = 1; 
     console.log(occ); 
    } 
} 

でそれを行うことができます。

1

あなたは、私は特定の値が表示された回数を格納するオブジェクトを使用しています次のよう

function shuffle(a) { 
 
    for (let i = a.length; i; i--) { 
 
     let j = Math.floor(Math.random() * i); 
 
     [a[i - 1], a[j]] = [a[j], a[i - 1]]; 
 
    } 
 
} 
 

 
let arr = ["cat", "dog"]; 
 
let temp = []; 
 
for(let str of arr){ 
 
    temp = temp.concat(Array(10).fill(str)); 
 
} 
 

 
shuffle(temp); 
 
console.log(temp);

2

単純なforループを使用して、プッシュまたはプッシュを使用して、両方の要素でそれぞれ50%のチャンスが得られます。

var array = ["cat", "dog"]; 
 
var maxRepeat = 10; 
 

 
const random = function(arr, n) { 
 
    var c = 0,r = [],total = n * arr.length; 
 
    for (var i = 0; i < total; i++) { 
 
    var rand = Math.random() <= 0.5; 
 
    var el = arr[c++ % arr.length] 
 
    rand ? r.push(el) : r.unshift(el) 
 
    } 
 
    return r; 
 
} 
 

 
console.log(random(array, maxRepeat))

1

それはあなたが求めている内容を正確に把握するのは難しいのですが、ここでは各動物のためにランダム"cat"または"dog"(10回を返す関数です。すべての動物の後に排出されていますnull):

var array = ["cat", "dog"], 
    maxRepeat = 10; 

let getRandomAnimal = (() => { 
     let totalAnimals = maxRepeat * array.length, 
      animals = new Array(totalAnimals), 
      index = 0; 

     for (let i = 0; i < totalAnimals; ++i) { 
      animals[i] = array[i % array.length]; 
     } 

     animals.sort(() => Math.floor(Math.random() - 0.5)); 

     return() => { 
      return ((index >= totalAnimals) ? null : animals[index++]); 
     }; 
    })(); 
関連する問題