管理员
|
阅读:4697回复:1
不能使用for循环,传入n和m, 生成一个长度为n,每一项都是m的数组
楼主#
更多
发布于:2020-09-15 16:06
逛知乎的时候看到一个问题,不能使用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()类似可以去完成功能的,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 或 do ... while,来自灰色v碰触
用while用的少,一下就想不起来了...
|