可能な値の配列からいくつかの数値をランダムに出力しようとしています。
私が抱えている問題は再帰にあるため、ランダムに生成された数値が既に使用されているかどうかをチェックする関数が、数値が既に使用されている場合 (および可能な値の配列に含まれていない場合) に再び開始されます。
私も理解していない無限ループを取得します。
これが私のコードです:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script>
// Global array of possible numbers
var possibleNumbers = [1, 2, 3, 4];
// Check if element in the array
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
// Random number between 1 and 4
function genRand(){return Math.floor(1+ (4 * Math.random()));}
// Return an random number from the possible numbers in the global array
function randNumFromArray() {
var generatedNum = genRand();
console.log('possibleNumbers so far:' + possibleNumbers);
console.log('generatedNum: ' + generatedNum);
// Restart as long as the number is not in the array (not already used)
while(inArray(generatedNum,possibleNumbers) === false) {
console.log('Generating again...');
randNumFromArray();
}
console.log('generatedNum not used yet, using it');
// Use that number and remove it from the array
var index = possibleNumbers.indexOf(generatedNum);
if (index > -1) {
possibleNumbers.splice(index, 1);
}
console.log('Removing the number from the array');
console.log('possibleNumbers after removal:' + possibleNumbers);
return generatedNum;
}
// Calling the function 4 times to get the 4 possible numbers in a random order
randNumFromArray();
randNumFromArray();
randNumFromArray();
randNumFromArray();
</script>
</head>
<body>
</body>
</html>