不能使用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用的少,一下就想不起來了...segmentfault


但願能看到你們更好的方法,感受本身進了死衚衕...數組

相關文章
相關標籤/搜索