逛知乎的時候看到一個問題,不能使用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()
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 或 do … while,來自灰色v碰觸
用while用的少,一下就想不起來了…
希望能看到大家更好的方法,感覺自己進了死衚衕…