高级前端手写代码【Q619】使用 JS 如何生成一个随机字符串

使用 JS 如何生成一个随机字符串

更多描述 random 接收一个整数作为随机数的个数,最多生成8个随机数

// 'a839ac'
random(6);
 
// '8abc'
random(4);

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 637

Author 回答者: shfshanyue

const random = (n) =>
  Math.random()
    .toString(36)
    .slice(2, 2 + n);
 
random();
// => "c1gdm2"
random();
// => "oir5pp"

Author 回答者: wangjs-jacky

山月老师给出的答案:使用 Math.random 产生的随机数进行 36 进制转化,该随机数是由0-9,a-z 构成的。

还有一种方案是对大写字母,小写字母以及数字的 ASCII 码进行转化。

random_v1(4);
random_v1(6);
 
// ASCII:
// 大写字母:65~90
// 小写字母:97~122
// 数字:48-57
function random_v1(num: number) {
  let b = new Array(num)
    .fill(0)
    .map(() => String.fromCharCode(generateAcsii()))
    .join("");
  console.log(b);
}
 
function generateAcsii() {
  // 生成 [65,90] && [97,122] && [48,51]
  let a = Math.floor(Math.random() * 62); // [0,62]
  if (a < 26) {
    //  返回 大写字母 的 ASCII
    return a + 65;
  } else if (a >= 26 && a < 52) {
    //  返回 小写字母 的 ASCII
    return a - 26 + 97;
  } else {
    //  返回 数字 的 ASCII
    return a - 52 + 48;
  }
}