gpt4 book ai didi

javascript - 生成列表中没有的5位随机码

转载 作者:行者123 更新时间:2023-12-03 11:54:09 25 4
gpt4 key购买 nike

我的要求是生成 5 位唯一代码,该代码不在列表中。

例如,如果我有 [12345, 54321, 13245, 11234] ,我想生成34522等等..我正在使用下面的代码

function id(){
var text = "", can = "12345";
for( var i = 5; i--; text += can.charAt(Math.floor(Math.random() * can.length)));
return text;
}

var list = [12345, 54321, 13245, 11234];
var generated;
while(!generated){
var t = makeid();
if(list.indexOf(t) == -1){
generated = t;
}
}

这工作正常,但是当列表增长时,这将花费更多时间(?)。还有其他方法可以编写这个机制吗?

最佳答案

作为@elclanrs said ,最好使用哈希方法

var obj = {};
for(var i=0; i<list.length; ++i) { obj[list[i]] = true; }

然后检查

obj.hasOwnProperty(t);

最好使用 hasOwnProperty 而不是 in 以避免在原型(prototype)链中搜索。

<小时/>

但是,您可以使用 ES6 Set 来简化它:

var set = Set(list);

然后检查

set.has(t)

请注意,并非所有浏览器都支持它。

<小时/>

请注意,id 返回一个字符串,但 list 是一个数字数组!

要解决这个问题,请将 id 转换为数字(例如使用一元 +),或使用类似的内容

function id() {
var num = 0, len = 5;
for(var i=0; i<len; ++i) {
num *= 10;
num += Math.floor(Math.random() * len) + 1;
}
return num;
}

关于javascript - 生成列表中没有的5位随机码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25676477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com