flatten数组扁平化

把所有嵌套数组连接到一个数组中,也即数组扁平化 数组扁平化小课堂开课啦:

  • 完全扁平化:

    • 如果数组的元素都是数字,那么我们可以考虑使用toString方法,[1,[2,[3,4]]].toString().split(',').map((c)=>Number(c));

    • 利用reduce+递归 flatten = (arr)=>arr.reduce((prev,next)=>prev.concat(Array.isArray(next)?flatten(next):next),[]);

      • 利用...运算符,

      flatten = (arr)=>{while(arr.some(item=>Array.isArray(item))){ arr = [].concat(...arr); } return arr; }

只去除一层:

  • 一个很神奇的方法 Function.apply.bind([].concat,[]);

    解释:

    flatten = Function.apply.bind([].concat,[]);
          = (arr)=>[].concat.apply([],arr);
          = [].concat(...arr)
  • [].concat(...arr);

解释:a = [1,[3,2]] => [].concat(1,[3,2]) => [1].concat([3,2]) =>[1,3,2]

因为一层去除结合es6...很容易实现,我们这里只支持完全扁平化

_.flatten = (arr)=>{
        while(_.some(arr,item=>Array.isArray(item))){
                arr = [].concat(...arr);
        }
        return arr;
}

Last updated