我试图实现组合不重复。在图像中你可以看到“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();
有什么帮助吗?
只需将结果保存在一个 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();
如果您在开始接近唯一值限制的情况下使用它,更好的方法是提前生成所有可能的组合,随机化数组,然后在调用函数时不断从数组中弹出字符串.
给定你的脚本,一种方法是循环遍历结果,并在 a === b 处去掉 b。
然后生成新的随机字符串来填补差异,直到你没有新的等价物。