我试图在用户单击按钮的地方添加一些代码,该代码生成3个数字(没有重复,因此245可以,但是122和121则不行),并在屏幕上每秒显示一次。为了确保没有重复,我使用了一个数组:var usedNums = [];。然后,我创建一个数字(digit = Math.random())并检查它是否已经在数组中,如果不是,则添加它,如下所示:

if ($.inArray(digit, usedNums) !== -1) {
        newNums();
    } else {
        usedNums.push(digit);
        $('#memDigit').html(digit);

}


最初的几次,它都有效,但是当我第十次单击它时,出现了Uncaught RangeError: Maximum call stack size exceeded错误。救命!

这是完整的代码:

var usedNums = [];
var digit;
var amount = 3;

function newNums() {
    digit = Math.floor(Math.random() * 10);
    if ($.inArray(digit, usedNums) !== -1) {
        newNums();
    } else {
        usedNums.push(digit);
        $('#memDigit').html(digit);

    }

}

function createNums() {
    for (var i; i < amount; i++) {
        setTimeout(newNums, 1000);
    }
}

//$(document).ready(createNums);

最佳答案

我认为您应该在每个数字生成完成后清空/重新初始化usedNums数组。

关于javascript - 使用Javascript搜索数组中的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41205273/

10-12 15:09