JS二维数组变一维数组的方法总结

    1   利用es5arr.reduce(callback[, initialValue])实现:

      var arr1 = [[0, 1], [2, 3], [4, 5]];   

         var arr2 = arr1.reduce((a, b) =>{ return a.concat(b)} );

        利用 es6中的 map实现

        var arr1 = [[0, 1], [2, 3], [4, 5]];
             function fn(arr) {
                 return [].concat(...arr.map(item => Array.isArray(item) ? fn(item) : item))
             }
          var arr2 = fn(arr1);

    3   利用apply实现
                
         var arr1 = [[0, 1], [2, 3], [4, 5]];
            var arr2 = [ ].concat.apply( [ ], arr1 ) ;
 
 
       4    通过将数组转变成字符串,利用str.split(',')实现。缺点是数组元素都变字符串了
          var arr1 = [[0, 1], [2, 3], [4, 5]];
           var arr2 = (arr1 + '').split(',');
           var arr2 = arr.toString().split(',');
           var arr2 = arr.join().split(',');
 
     5  利用 ES6 的最新语法,Array.prototype.flat()。缺点是,有兼容性问题。优点是非常简单。

        var arr1 = [1, 2, [3, 4]];
        arr1.flat();                                 // [1, 2, 3, 4]
 
        var arr2 = [1, 2, [3, 4, [5, 6]]];
        arr2.flat();                                 // [1, 2, 3, 4, [5, 6]]
 
        var arr3 = [1, 2, [3, 4, [5, 6]]];
        arr3.flat(2);                               // [1, 2, 3, 4, 5, 6]
        arr3.flat(Infinity);                       // [1, 2, 3, 4, 5, 6]         // Infinity展开所有嵌套数组

        var arr4 = [1, 2, , 4, 5];
        arr4.flat();                                  // [1, 2, 4, 5]
 
特殊说明flat()方法会移除数组中的空项。但undefined、null仍会保留

          var arr = [1, 2, undefined , 4, 5, null];
               arr.flat();                                    // [1, 2, undefined , 4, 5, null]


posted @ 2021-08-08 14:18  爱划水的小刚哥  阅读(2598)  评论(1编辑  收藏  举报