在JavaScript中生成一个随机的字母数字(大写,小写和数字)字符串来用作可能唯一的标识符的最短方法是什么?


当前回答

可以使用lodash uniqueId:

    _.uniqueId([prefix=''])

生成唯一的ID。如果给出了prefix,则ID被追加到它后面。

其他回答

更新: 一行程序解决方案,随机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的一种更短、更快、更有趣的表达方式。(这里有一些信息

在看了这个问题的答案和其他来源的答案后,这是最简单的解决方案,同时允许修改所包含的字符和选择返回结果的长度。

// 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"

随机字符:

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/