3 回答

TA貢獻1873條經驗 獲得超9個贊
問題在于,一旦拼接數組,您就不會修改 'i' 變量。
例如,您的陣列最終可能會變成
nums = ["one","two","three","four","ten"]
雖然你的 'i' 仍然是 10,所以 'j' 可以獲得對你的數組來說太大的值,從而導致你未定義。
為了解決這個問題,讓 'i' 獲得新的數組長度或在函數結束時將其減少 1

TA貢獻1846條經驗 獲得超7個贊
我希望這會幫助你 :)
var nums = ["one","two","three","four","five","six","seven","eight","nine","ten"],
ranNums = [],
j = 0;
intervall = setInterval(getNum,2000);
function getNum(){
i = nums.length
if(i == 0) {
clearInterval(intervall)
console.log('the end')
} else {
console.log(i)
j = Math.floor(Math.random() * (i));
ranNums.push(nums[j]);
nums.splice(j,1);
console.log(ranNums[ranNums.length-1]);
}
}

TA貢獻1829條經驗 獲得超7個贊
首先 splice() 方法通過刪除或替換現有的來改變數組的內容。Splice 這就是為什么你沒有定義(因為你修改了初始數組長度。另外,如果你稍微搜索一下,你會發現在兩個值之間獲取一個隨機整數
你也沒有提到你什么時候想停下來。但下面是賓果游戲?。?!
var nums = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"],
ranNums = [],
i = nums.length,
j = 0;
setInterval(getNum2, 2000);
function getNum2() {
var min = Math.ceil(null); //rounds a number up to the next largest whole number or integer
var max = Math.floor(nums.length); // returns the largest integer less than or equal to a given number
var rdNumber = Math.floor(Math.random() * (max - min)) + min;
// You can set a rult when you want to stop for e.g
// if (ranNums.length === 5){ clearInterval(getNum2)}
ranNums.push(nums[rdNumber]);
console.log(nums[rdNumber]);
}
添加回答
舉報