美文网首页
使用递归的方式 实现数组flatten函数

使用递归的方式 实现数组flatten函数

作者: Long_Dark | 来源:发表于2020-03-14 18:26 被阅读0次

用if进行判断

var arr = [1, [2, 3], "4,5", [6,[7]]]       //给数组arr赋值

function flat(arr){           //用函数实现拍平
  var arr2 = []           //赋值一个新的空数组
  arr.forEach(function(val){          //用 forEach 遍历数组arr
    if (Array.isArray(val)){            //用 Array.isArray 判断数组内的每一项 "val" 是否为数组
      arr2 = arr2.concat(flat(val))          //如果是数组,再执行一遍flat,递归。 .concat 产生新数组,需要重新赋值
    }
    else{
      arr2.push(val)         //否则直接将 "val" push到arr2的后面
    }
  })
  return arr2          //返回arr2的值
}

var a = flat(arr)
console.log(a)          //arr2 = [1, 2, 3, "4, 5", 6, 7]

使用reduce进行合并的方法

var arr = [1, [2, 3], "4,5", [6,[7]]]

function flat2(arr){    //用函数实现拍平
  return arr.reduce(     //返回一个值。值的内容是reduce合并后的内容,创建一个函数来表示reduce
    function(v1, v2){     //意思分别为数组的前一项和后一项
      return v1.concat(Array.isArray(v2)?flat2(v2):v2)  //返回值。值的内容是:如果是一个数组,继续拍平,如果不是数组,直接concat到前一项的后面
    }          //第一次concat就是 [].concat(arr[0])
  ,[]      //重要!!!这里定义的是reduce的初始值,一个空数组,此时前一项是[],后一项是arr[0]
  )  
}

var arr2 = flat2(arr)
console.log(arr2)     //[1, 2, 3, "4,5", 6, 7]

上面的代码美化以后

var arr = [1, [2, 3], "4,5", [6,[7]]]

function flat2(arr){
  return arr.reduce(function(v1, v2){
      return v1.concat(Array.isArray(v2)?flat2(v2):v2)}
  ,[])  
}

var arr2 = flat2(arr)
console.log(arr2)      //[1, 2, 3, "4,5", 6, 7]

相关文章

网友评论

      本文标题:使用递归的方式 实现数组flatten函数

      本文链接:https://www.haomeiwen.com/subject/riogshtx.html