gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
阅读:4697回复:1

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

楼主#
更多 发布于:2020-09-15 16:06
逛知乎的时候看到一个问题,不能使用for循环,传入n和m, 生成一个长度为n,每一项都是m的数组。第一反应是递归,然后再想到正则,还在思考中...





递归法






  1. function getArr(n,m) {



  2. // 方法一: 递归



  3. let arr = new Array(n)



  4. function setData (index) {



  5. if (index >= 0) {



  6. if (!arr[index]) {



  7. arr[index] = m



  8. }



  9. setData(index - 1)



  10. }



  11. }



  12. setData(arr.length - 1)



  13. return arr



  14. }



  15. getArr(10, 'aa') // ["aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa"]







正则法




  1. function getArr(n,m) {



  2. // 方法二: 正则 (缺点:当传入的数据带,时,以,为分隔符会出错,逻辑还需要优化)



  3. let str = new Array(n).join(' ') // 生成对应长度的字符串



  4. str = str.replace(/\s?/g, m) // 使用正则替换得到对应的字符串



  5. str = str.replace(new RegExp(`(${m})`, 'g'), '$1,') // 得到逗号分隔的字符串



  6. str = str.substring(0, str.length - 1)



  7. return str.split(',')



  8. }



  9. getArr(3, '12345') // ["12345", "12345", "12345"]





fill()


类似可以去完成功能的,map()和filter()。




  1. function getArr(n,m) {



  2. // 方法三: fill()



  3. return Array(n).fill(m)



  4. }



  5. getArr(10, 'aa') // ["aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa", "aa"]





map()






  1. function getArray(n, m){



  2. return result = Array(n).join(",").split(",").map(() => {



  3. return m



  4. })



  5. }








while

用while用的少,一下就想不起来了...
游客


返回顶部