JavaScript 随机产生不重复的数字思路(递归法)

代码

/**
 * 产生指定长度 0~11的数字,且不重复数字的数组,使用了递归方法
 * @author chuwen   <wenzhouchan@gmail.com>
 * @link            https://NowTime.cc
 * @param length    指定生成数组的长度,默认为5
 * @param arr       默认空白数组,不需要填写
 * @returns {Array} 输出数组
 */
function random_num(length=5, arr=[]) {
    let random = Math.floor(Math.random()*11)+1, repeat = false;
    random = random > 9 ? random.toString() : '0'+random;//将数字转化成字符串。如果小于9,给数字前面补一个零

    if(arr.length > length-1) return arr;//达到了指定数组长度,直接输出数组

    for(let item in arr){
        if(arr[item] === random) return random_num(length, arr);//如果数组中存在与本次随机产生的随机数有相同的,就递归调用
    }

    arr.push(random);//将产生的随机数,追加进 arr
    return random_num(length, arr);//然后进行递归调用
}

# 运行结果

console.log(random_num(5));//运行结果如下
["02", "04", "06", "10", "01"]

console.log(random_num(4));//运行结果如下
["03", "10", "08", "06"]

如无特别声明,该文章均为 现在网NowTime.cc)原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。


标签: JavaScript

赞 (0)

添加新评论