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]);
}
添加回答
举报