不能运用for轮回,传入n和m, 天生一个长度为n,每一项都是m的数组

逛知乎的时刻看到一个题目,不能运用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"]

fill()

  • 来自ntnyq, ntnyq说的数组的fill()要领,之前都不晓得的,谢谢,然后马上就想到了相似能够去完成功用的,map()和filter()。
function getArr(n,m) {
    // 要领三: fill()
    return Array(n).fill(m)
} 
getArr(10, 'aa') // ["aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa"]

map()

function getArray(n, m){
    return result = Array(n).join(",").split(",").map(() => {
        return m
    })
}

while

用while用的少,一下就想不起来了…

希望能看到人人更好的要领,觉得本身进了死胡同…

    原文作者:我在长安长安
    原文地址: https://segmentfault.com/a/1190000017876659
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞