在JavaScript中生成一个随机的字母数字(大写,小写和数字)字符串来用作可能唯一的标识符的最短方法是什么?
当前回答
随机字符:
String.fromCharCode(i); //where is an int
随机整数:
Math.floor(Math.random()*100);
把它们放在一起:
function randomNum(hi){
return Math.floor(Math.random()*hi);
}
function randomChar(){
return String.fromCharCode(randomNum(100));
}
function randomString(length){
var str = "";
for(var i = 0; i < length; ++i){
str += randomChar();
}
return str;
}
var RandomString = randomString(32); //32 length string
小提琴:http://jsfiddle.net/maniator/QZ9J2/
其他回答
beans建议的另一种答案变体
(Math.random()*1e32).toString(36)
通过改变乘数1e32,你可以改变随机字符串的长度。
更新: 一行程序解决方案,随机20个字符(字母数字小写):
Array.from(Array(20), () => Math.floor(Math.random() * 36).toString(36)).join('');
或者用lodash更短:
_.times(20, () => _.random(35).toString(36)).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的一种更短、更快、更有趣的表达方式。(这里有一些信息
我只是发现了一个非常好的优雅的解决方案:
Math.random().toString(36).slice(2)
这个实现的注意事项:
This will produce a string anywhere between zero and 12 characters long, usually 11 characters, due to the fact that floating point stringification removes trailing zeros. It won't generate capital letters, only lower-case and numbers. Because the randomness comes from Math.random(), the output may be predictable and therefore not necessarily unique. Even assuming an ideal implementation, the output has at most 52 bits of entropy, which means you can expect a duplicate after around 70M strings generated.
我认为以下是允许给定长度的最简单的解决方案:
Array(myLength).fill(0).map(x => Math.random().toString(36).charAt(2)).join('')
这取决于箭头函数的语法。
推荐文章
- 如何清除所有<div>的内容在一个父<div>?
- 随机字符串生成器返回相同的字符串
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?