无需重复组合的随机字符串生成器

问题描述 投票:0回答:2

我试图实现组合不重复。在图像中你可以看到“sd”是如何重复两次的。

sd

const characters ='qwertyuiopasdfghjklzxcvbnm0987654321';

function generateString(length) {
    let result = ' ';
    const charactersLength = characters.length;
    for ( let i = 0; i < length; i++ ) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }

    return result;
}



function captura(){
    lon=2;
    can=600;
    for (let i = 0; i < can; i++) {
        document.write(i+1 + ".- " + generateString(lon) + "<br>");
    }

}
captura();

有什么帮助吗?

javascript html string random generator
2个回答
0
投票

只需将结果保存在一个 Set 中,并确保您最后返回的内容不在 Set 中。

const characters ='qwertyuiopasdfghjklzxcvbnm0987654321';

function generateString(length) {
    let result = ' ';
    const charactersLength = characters.length;
    for ( let i = 0; i < length; i++ ) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
    }

    return result;
}
const set = new Set();
const generateUniqueString = (len) => {
  let str;
  do {
    str = generateString(len);
  } while (set.has(str));
  set.add(str);
  return str;
};


function captura(){
    for (let i = 0; i < 50; i++) {
        document.write(i+1 + ".- " + generateUniqueString(2) + '<br>');
    }

}
captura();

如果您在开始接近唯一值限制的情况下使用它,更好的方法是提前生成所有可能的组合,随机化数组,然后在调用函数时不断从数组中弹出字符串.


0
投票

给定你的脚本,一种方法是循环遍历结果,并在 a === b 处去掉 b。

然后生成新的随机字符串来填补差异,直到你没有新的等价物。

© www.soinside.com 2019 - 2024. All rights reserved.