2016-03-24 4 views
0

9個の数字のリストから9個の乱数を与える配列を持っている場合、同じ数字のうち3個しか複製できないようにするにはどうすればよいですか? たとえば、私の乱数配列が[4,3,4,4,7,8,8,8,9]の場合。 私は上記のように2つではなく、いずれか1つの配列に1つのトリオの番号しか存在しないようにする必要があります。3つの数字は、1-9の間の乱数リストから同じです。

あなたはあなたがアレイに追加された乱数を格納するために使用しますが、これを試しているされているもので randomNumを交換する必要があります
+4

あなたは、これらの乱数を生成するコードを共有することができますか? – gurvinder372

答えて

0

:3またはがある場合

var arrayOfRandomNums = []; 

function maxInstancesInArray(arr, val) { 
    var hits = []; 
    for(i = 0; i < arr.length; i++) 
     if (arr[i] === val) 
      indexes.push(i); 
    return indexes.length > 2; 
} 

if(!maxInstancesInArray(arrayOfRandomNums, randomNum) { 
    arrayOfRandomNums.push(randomNum); 
} 

関数はtrueを返します配列内にすでに入っている番号のインスタンスが増えているので、次の配列を配列にプッシュするかどうかを定義するために使用することができます。

0

私はjsFiddleを作成しました。考え方は、毎回ランダムな数字を取得してチェックする代わりに、利用可能な数字のリストを配列に持ち、この配列のインデックスをランダムに持つことです。

https://jsfiddle.net/m8ohmxmb/

function randNumber(maxRange,maxOccurrencies, resultArrayLenght) { 
    var num = []; 
    var occ = []; 
    var result = []; 
    var randElem; 

    for (var i = 0; i < maxRange; i++) { 
     num.push(i + 1); 
     occ.push(0); 
    } 

    for(i = 0; i < resultArrayLenght; i++) { 
     randElem = Math.floor(Math.random() * num.length); 
     occ[randElem] = occ[randElem] + 1; 
     result.push(num[randElem]); 
     if(occ[randElem] === maxOccurrencies) { 
      occ.splice(randElem,1); 
      num.splice(randElem,1); 
     } 
    } 
    return result; 
    } 
+0

すべての助けをくれてありがとう、私は今、それを修正した、私はindexOfを使用し、それがindexOf要素と一致するまで私の配列を循環した。 –

+0

例:doループ内のif文if this like:if randomNumber == 1 && this.array.indexOf(1)!= - 1これにより、doループの先頭にある変数セットがtrueに変更されます –

0

これはinsertet値とその数を維持するための一時的なオブジェクトとの簡単な方法です。

function push(n) { 
 
    if (count.full && count[n] === 2) { 
 
     alert('can not insert ' + n); 
 
     return; 
 
    } 
 
    array.push(n); 
 
    count[n] = (count[n] || 0) + 1; 
 
    if (count[n] === 3) { 
 
     count.full = true; 
 
    } 
 
} 
 

 
var array = [], 
 
    count = {}; 
 

 
[4, 3, 4, 4, 7, 8, 8, 8, 9].forEach(push); 
 
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

関連する問題