首页 > 解决方案 > 如何修复检查相同随机数组值的函数

问题描述

我正在学习 javascript,我已经能够创建一个具有参数的函数,该函数的任务是形成一个包含 1 个参数的 2 个字符 (0/1) 随机字符串的数组,并且返回值必须是一个数组。例子:

console.log (generateString(2));

样本结果:

['01', '11']

我面临的问题是即使它是一个随机字符串,但它仍然有可能具有相同的值。假设我运行程序代码

console.log (generateString(4));

结果之一是这样的:

['00', '00', '01', '10']

我的问题是如何确保数组的返回值没有重复值?这是我到目前为止的代码..

function generateString(num){

        let newArray = [];
        for(let i = 0; i < num; i++){
            let randomChar = generateCharacters();
            if(i >= 1 && (newArray[i - 1] === randomChar)){
                randomChar = generateCharacters();
                newArray.push(randomChar);
            } else {
                newArray.push(randomChar);
            }

        }
        return newArray;
    }

    function generateCharacters(){
        const chars = '01';
        let result = '';
        for (let j = 2; j > 0; --j){
            result += chars[Math.floor(Math.random() * chars.length)];
        }
        return result;
    }

    console.log(generateString(4));

标签: javascriptarrays

解决方案


您可以在do-while内部使用 afor-loop并继续制作新的随机字符串,直到生成的新字符串不包含在前一个数组中。

function generateString(num){

        let newArray = [];
        let randomChar;
        for(let i = 0; i < num; i++){
            do{
              randomChar = generateCharacters();
            }
            while(newArray.includes(randomChar));
            newArray.push(randomChar)

        }
        return newArray;
    }

    function generateCharacters(){
        const chars = '01';
        let result = '';
        for (let j = 2; j > 0; --j){
            result += chars[Math.floor(Math.random() * chars.length)];
        }
        return result;
    }

    console.log(generateString(4));


推荐阅读