在JavaScript中生成一个随机的字母数字(大写,小写和数字)字符串来用作可能唯一的标识符的最短方法是什么?
当前回答
我认为以下是允许给定长度的最简单的解决方案:
Array(myLength).fill(0).map(x => Math.random().toString(36).charAt(2)).join('')
这取决于箭头函数的语法。
其他回答
function randomString(len) {
var p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return [...Array(len)].reduce(a=>a+p[~~(Math.random()*p.length)],'');
}
简介:
创建一个我们想要的大小的数组(因为javascript中没有等价的range(len))。 对于数组中的每个元素:从p中随机选择一个字符并将其添加到字符串中 返回生成的字符串。
这里做一些解释:
[...阵列望远镜(len)]
Array(len)或new Array(len)创建一个指针未定义的数组。单行语句将更难实现。Spread语法方便地定义了指针(现在它们指向未定义的对象!)
.reduce (
在本例中,将数组缩减为单个字符串。reduce功能在大多数语言中都很常见,值得学习。
a = > a+...
我们用的是箭头函数。
A是累加器。在本例中,它是当我们完成时将返回的最终结果字符串(你知道它是一个字符串,因为reduce函数的第二个参数initialValue是一个空字符串:")。基本上就是:用p[~~(Math.random()*p.length)]转换数组中的每个元素,将结果附加到a字符串中,当你完成时给我一个。
p[…]
P是我们要从中选择的字符串。你可以像访问索引一样访问字符串中的字符(例如,"abcdefg"[3]给了我们"d")
~ ~ (math . random () * p.length)
Math.random()返回一个位于[0,1]之间的浮点数。Math.floor(Math.random()*max)是javascript中获取随机整数的事实标准。~是javascript中按位的NOT操作符。 ~~是Math的一种更短、更快、更有趣的表达方式。(这里有一些信息
如果你只想允许特定的字符,你也可以这样做:
function randomString(length, chars) {
var result = '';
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
return result;
}
var rString = randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
下面是一个演示的jsfiddle: http://jsfiddle.net/wSQBx/
另一种方法是使用一个特殊的字符串,告诉函数使用什么类型的字符。你可以这样做:
function randomString(length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
var result = '';
for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
return result;
}
console.log(randomString(16, 'aA'));
console.log(randomString(32, '#aA'));
console.log(randomString(64, '#A!'));
小提琴:http://jsfiddle.net/wSQBx/2/
或者,像下面描述的那样使用base36方法,你可以这样做:
function randomString(length) {
return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1);
}
在看了这个问题的答案和其他来源的答案后,这是最简单的解决方案,同时允许修改所包含的字符和选择返回结果的长度。
// generate random string of n characters
function randomString(length) {
const characters = '0123456789abcdefghijklmnopqrstuvwxyz'; // characters used in string
let result = ''; // initialize the result variable passed out of the function
for (let i = length; i > 0; i--) {
result += characters[Math.floor(Math.random() * characters.length)];
}
return result;
}
console.log(randomString(6));
随机密钥生成器
keyLength参数是你想要的键的字符长度
function keyGen(keyLength) {
var i, key = "", characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var charactersLength = characters.length;
for (i = 0; i < keyLength; i++) {
key += characters.substr(Math.floor((Math.random() * charactersLength) + 1), 1);
}
return key;
}
keyGen(12)
"QEt9mYBiTpYD"
var randomString = function(length) {
var str = '';
var chars ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(
'');
var charsLen = chars.length;
if (!length) {
length = ~~(Math.random() * charsLen);
}
for (var i = 0; i < length; i++) {
str += chars[~~(Math.random() * charsLen)];
}
return str;
};