js 常见逻辑练习2--生成指定长度的随机字符串

题目简述

在函数中生成一个指定长度的随机字符串,字符串只能包含大写字母、小写字母、数字;

需求分析和实现

这里为大家展示两种写法

方法一

/**
 * 
 * @param {Number} leng 指定字符串的长度
 * @returns{String} 返回生成的字符串
 */
// 按照题意生成一个函数接收方法
function sjs(leng) {
    // 大写字母、小写字母、数字能出现的情况
    var char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
        // 定义一个字符串接收随机生成的字符串
    var chars = ''
        // 遍历
    for (var i = 0; i < leng; i++) {
        //    chars 的值为char中下标为随机数的值
        // 这个随机数取值是Math.random()  0-1不到1
        // Math.random()*char.length 0-1之间的数*char的长度,生成一个0-char.length之间的数,取整不包含最后一个,但是length长度为最大下标+1,所以不用加一
        //最后用+来拼接
        chars += char.charAt(parseInt(Math.random() * (char.length)))
    }
    //返回得到的字符串
    return chars
}

本种解法是先把题目中规定字符串只能包含大写字母、小写字母、数字一一列出用char接收,然后用Math方法将他们随机出来,每一轮随机一个,因为Math.random()随机的是 0-1不到1的随机数,当他乘上char.length的时候,则可以生成一个0-char.length,不包含char.length的数,按照char.length和下标的关系,刚好可以完全遍历;最后拼接
我们可以试验一下:

cosole.log(sjs(5))
console.log(sjs(10))

此时输出
输出结果
分别输出了长度为5和10的字符串,且字符串只能包含大写字母、小写字母、数字

方法二

/**
 * 
 * @param {Number} len  指定字符串的长度
 * @returns {String} 返回生成的字符串
 */
function sjs(len) {
    // 定义一个数组存入所有的字符
    var temp = [];
    // 存入26个大写字母
    // A-Z的万国码  65-90 
    // 因为要遍历所以i要么小于等于90,要么小于91才能遍历
    // push() api在尾部添加一个值
    // String.fromCharCode()将万国码转成字符
    for (var i = 65; i < 90 + 1; i++) {
        temp.push(String.fromCharCode(i))
    }
    // 这里用来检验是否将A-Z写进去
    // console.log(temp)
    // 存入26个小写字母
    // a-z的万国码 97-122
    // 因为要遍历所以i要么小于等于122,要么小于123才能遍历
    for (var i = 97; i < 122 + 1; i++) {
        temp.push(String.fromCharCode(i))
    }
    // 这里用来检验是否有A-Z以及a-z
    // console.log(temp)
    // 存入0-9数字
    // 0-9的万国码 48-57
    // 因为要遍历所以i要么小于等于57,要么小于58才能遍历
    for (var i = 48; i < 58; i++) {
        temp.push(String.fromCharCode(i))
    }
    //这里用来检验是否有所有大写字母、小写字母、数字
    // console.log(temp)
    // 生成一个空的字符串来接收生成的字符串
    var str = "";
    // 遍历
    for (var j = 1; j <= len; j++) {
        // Math.random() [0-1)这里的原理同上,就不在复述
        var random = parseInt(Math.random() * temp.length);
        // 检验是否在范围内
        // console.log(random);
        // 将随机取得下标拼接上去
        str = str + temp[random];
    }
    return str;
}

我们可以试验一下:

cosole.log(sjs(5))
console.log(sjs(10))

此时输出

效果展示

本种方法和方法一最大的区别在于方法一直接将他们列出来,而方法二将他们转换成万国码,最后在转换回来,基本方法差不多,每行都有具体的解释,因此这里不再过多描述,有什么不懂得欢迎留言,有更好的更多的解法欢迎评论区探讨!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值