我的要求是生成不在列表中的5位唯一码。生成不在列表中的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;
}
}
这工作得很好,但当名单不断增加,这将需要更多的时间(? )。有没有其他的方法来写这个机制。
如果它只是你可以使用一个哈希方法数字。 'var seen = {}',然后'if(!(x in seen)){seen [x] = 1}'。这会更快。 – elclanrs 2014-09-04 23:29:28
@elclanrs是的,这是真的。但假设列表作为一个数组有很多我不能改变的操作。对不起 – redV 2014-09-04 23:31:18
你错过了一点,我的意思是使用一个对象作为缓存,而不是在数组上调用'indexOf'。将缓存保存在闭包中。 – elclanrs 2014-09-04 23:31:58