JS函数生成唯一的随机数

时间:2017-10-18 12:11:48

标签: javascript

我有以下效用函数:

var Utilities = (function (array, maxN) {

  function generateRandomNumber(array, maxN) {
        let randomN = Math.floor(Math.random() * (maxN - 0) + 0);

        if(array.length == maxN) {
            array = [];
        }

        if(!array.includes(randomN)) {
            array.push(randomN);
        }
        else {
            randomN = generateRandomNumber(array, maxN);
        }
        return randomN;
    }

    return {
        generateRandomNumber: generateRandomNumber
    };

})();

export default Utilities;
我正在使用的

function getRandomNumber() {
    var array = [];
    let randomN = Utilities.generateRandomNumber(array, 5);
    return randomN;
}

然后我在反应组件中使用此函数,如下所示:

...

    getNewQuestion = () => {
        var randomN = getRandomNumber();
        console.log(randomN);
        this.setState({
            question: this.state.data.data.questions[randomN]
        })
        this.setCatBgColor(this.state.data.data.questions[randomN].category);
    }

...

我刚做了一个测试,我得到了:

0,0,3

这是错误的,因为它们应该是唯一的,直到达到5的长度(在这种情况下)。

1 个答案:

答案 0 :(得分:0)

你的功能

function getRandomNumber() {
    var array = [];
    let randomN = Utilities.generateRandomNumber(array, 5);
    return randomN;
}

会在每次通话时创建一个新的空array,而不会记住任何内容。 generateRandomNumber无法了解之前的调用。将变量声明和初始化放在函数之外:

var array = [];
function getRandomNumber() {
    return Utilities.generateRandomNumber(array, 5);
}