极客时间返利平台,你可以在上边通过山月的链接购买课程,并添加我的微信 (shanyue94) 领取返现。
山月训练营之面试直通车 服务上线了,从准备简历、八股文准备、项目经历准备、面试、面经、面经解答、主观问题答复、谈薪再到入职的一条龙服务。

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

更多描述

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

// 'a839ac'
random(6);

// '8abc'
random(4);

Issue

欢迎在 Gtihub Issue 中回答此问题: Issue 637 (opens new window)

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

random();
// => "c1gdm2"
random();
// => "oir5pp"

山月老师给出的答案:使用 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;
  }
}
Last Updated: 6/26/2022, 10:48:10 AM