Skip to content

原生

let x = [0, 1, 2, [[[3, 4]]]];
x.flat(3)
x.flat(Infinity)

手写实现

递归

function flat(arr){
	let temp = []
  arr.forEach(v=>{
  	temp = temp.concat(Array.isArray(v) ? flat(v) :v)
  })
  return temp
}

原数组上修改

let arr = [3, 4, [4, 5, ['s']]]
function flat(arr) {
  let i = 0
  while(i < arr.length) {
  	if(Array.isArray(arr[i])) {
      let tmp = flat(arr[i])
    	arr.splice(i, 1, ...tmp)
      i += tmp.length - 1
    }
    i++
  }
  return arr
}
flat(arr) //[3, 4, 4, 5, 's']