数组展平的几种方法

用递归实现

数组展平 [[1,2],[[3],4]]=>[1,2,3,4];
这里是一个多维的数组,展平,这里先用递归来做:
用数学的方法思考:
  1. 对数组S={a1,a2,,...,an},函数F将数组展平
  2. F(S)=F(a1)∪F(a2)∪...∪F(an)
  3. 如果F(ai)等于数字则F(ai)=ai,如果F(ai)等于数组则F(ai)=F(ai)
  4. 用代码将数学表达式对应的表达出来
let arr = [[1,2],[[3],4]]
function flatten(arr) {
  return [].concat(
    ...arr.map(x=>
      Array.isArray(x) ? flatten(x):x
    )
  )
}
console.log(flatten(arr))// ->[1,2,3,4]

用生成器实现

和有递归实现的优势:比较容易思考

function* flatten(arr) {
    for(let i = 0;i < arr.length; i++) {
        if(Array.isArray(arr[i])) {
            yield * flatten(arr[i])
        } else {
            yield arr[i]
        }
    }
}

console.log([...flatten([1,2,3,[3,4,[4,5]]])])
//[ 1, 2, 3, 3, 4, 4, 5 ]
原文地址:https://www.cnblogs.com/fanzhanxiang/p/10302146.html