欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

不能使用for循环,传入n和m,生成一个长度为n,每一项都是m的数组

程序员文章站 2022-05-17 14:50:47
逛知乎的时候看到一个问题,不能使用for循环,传入n和m, 生成一个长度为n,每一项都是m的数组。第一反应是递归,然后再想到正则,还在思考中... 递归法 function...

逛知乎的时候看到一个问题,不能使用for循环,传入n和m, 生成一个长度为n,每一项都是m的数组。第一反应是递归,然后再想到正则,还在思考中...

递归法

function getarr(n,m) {
    // 方法一: 递归
    let arr = new array(n)
    function setdata (index) {
        if (index >= 0) {
            if (!arr[index]) {
                arr[index] = m
            }
            setdata(index - 1)
        }
    }
    setdata(arr.length - 1)
    return arr
} 
getarr(10, 'aa') // ["aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa"]

正则法

function getarr(n,m) {
    // 方法二: 正则 (缺点:当传入的数据带,时,以,为分隔符会出错,逻辑还需要优化)
    let str = new array(n).join(' ') // 生成对应长度的字符串
    str = str.replace(/\s/g, m)     // 使用正则替换得到对应的字符串
    str = str.replace(new regexp(`(${m})`, 'g'), '$1,') // 得到逗号分隔的字符串
    str = str.substring(0, str.length - 1)
    return str.split(',')
} 
getarr(3, '12345') // ["12345", "12345", "12345"]