管理员 
					 
				 
				
				
								
				
								
				 
				
			 
		 | 
		
			
						
				
					阅读:7190回复: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用的少,一下就想不起来了...				 
							 
		 |