js数组扁平化

463 阅读1分钟

数组扁平化处理:实现一个flatten方法,使得输入一个数组,该数组里面的元素也可以是数组,该方法会输出一个扁平化的数组。

举个栗子
let givenArr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]; let outputArr = [1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10]

递归

  • 声明一个res空数组进行存储,并作为结果返回
  • 如果元素是数值类型,则直接push到空数组res
  • 如果元素是Array类型,我们使用concat将其与res拼接起来。但是要注意,该元素的元素可能还是Array类型,比如对于元素[11, 12, [12, 13, [14]]]]来说,它的元素还包括Array对象,因此,我们在这里,需要进行递归调用
  • 判断是否是数组类型,可以用item instanceof Array,但我们可以用ES6Array.isArray(item)
function flatten(arr){
    let res = []
    arr.forEach((item)=>{
        Array.isArray(item)?res = res.concat(flatten(item)):res.push(item)
    })
    return res
}

基于上面的思路,也可以改写成下面这种形式:

function flatten(arr){
    arr.reduce((prev,current)=>{
      return prev.concat(Array.isArray(item)?flatten(item):item);
    },[])
}