2016-12-11 3 views
0

こんばんはみんな、私はランダムに配列から選択されている8文字の文字列を生成しようとしています配列からランダムな文字の文字列を生成し、ランダムに生成された数字の繰り返しを可能

。これは私が使用しているものです:

var myArrayPismo = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 

while(myArrayPismo.length < 9){ 
    var randomletter = Math.ceil(Math.random()*myArrayPismo.length) 
    if(myArrayPismo.indexOf(randomletter) > -1) continue; 
    myArrayPismo[myArrayPismo.length] = randomletter; 
} 

何らかの理由で、すべての文字を印刷します。

var kodCisla = []; 
while(kodCisla.length < 9){ 
    var randomnumber = Math.ceil(Math.random()*9) 
    if(kodCisla.indexOf(randomnumber) > -1) continue; 
    kodCisla[kodCisla.length] = randomnumber; 
} 

が正常に動作している:

は、そして、これは私の電話番号を生成する機能です。私は、毎回異なるだけでなく、2つ以上の同じ数字を生成できるようにしたいと考えています。 KODlkSmQW も、このように繰り返すことができます数字のランダムな文字列:887562327

これらの問題のいずれかの任意の助けをいただければ幸いに

私の目標は、このような文字のランダムな文字列を取得することです。

+0

あなたが出力として期待されているものの一例を示してください。まず、あなたはランダムにしたいと言う、次にあなたは重複が欲しいと言う。また、切り上げても「A」を得ることはないので、切り上げはしないでください。 –

+0

が追加されました – Jousi

+0

まだあなたに従っていません。ランダムを生成するときは、常に反復する可能性があります。 –

答えて

1

ここでは、配列からランダムな要素を抜き取る関数が便利です。 Math.ceilではなく、Math.floorの使用と、return文の前にある配列へのアクセスに注目してください。

function randomElement (array) { 
 
    return array[Math.floor(Math.random() * array.length)] 
 
} 
 

 
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''), 
 
    result = ''; 
 
for (var i = 0; i < 8; i++) { 
 
    result += randomElement(characters) 
 
} 
 
console.log(result) //=> (random 8-character string) 
 

乱数について、あなたは同様のrandomInRangeの機能を使用することができます:それはに基づいているため

function randomInRange (a, b) { 
 
    a |= 0 
 
    b |= 0 
 
    return Math.floor(Math.random() * (b - a + 1)) + a 
 
} 
 

 
var result = [] 
 
for (var i = 0; i < 8; i++) { 
 
    result.push(randomInRange(0, 9)) 
 
} 
 
console.log(result) //=> (eight random digits)

+0

乾杯、あなたは数字を生成する問題に私の "ソリューション"を追加することができますし、あなたは完全な答えを持っています。 – Jousi

0

はあなたの最初のwhileループは決して実行されていないがの条件はすでに偽で、26文字すべてを含むように設定しているためです。だから、後で見てみると、すべての元の値が得られます。必要なのは、生成されたランダムを入れるための追加の配列です。

またループする回数を正確に知っているので、この場合はwhileループから離れてください。そのため、通常のループforループを使用してください。

2番目の配列(数字付き)はこれを行い、確実に同じランダムを2回続けて出現させることができます。

しかし、どちらの配列も、配列にランダムをプッシュする前にチェックする必要はありません。

最後に、言及したように、Math.ceilを使用しないでください。最初の要素をランダムに戻すことは決してないため、Math.floorを代わりに使用してください。

var myArrayPismo = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; 
 

 
var resultArray = []; 
 

 
for(var i = 0; i < 8; ++i){ 
 
    resultArray.push(myArrayPismo[Math.floor(Math.random()*myArrayPismo.length)]); 
 
} 
 

 
console.log(resultArray.join(""));

関連する問題