JS 二维数组多维数组拍平扁平化

2020-09-15  本文已影响0人  夹板儿孩

一个很简单的需求,开发过程中遇到的
例:

  let arr = [1, [2, 3, [4, 5], 6, [7, [8, [9, [10]]]]]];  //多维数组
  let arr2 = [[1,2,3],[4,5,6],[7,8],9]                    //二维数组
  //  需要得到的结果
  // arr = [1,2,3,4,5,6,7,8,9,10];
  // arr2 = [1,2,3,4,5,6,7,8,9];

实现方式其实有很多种,我只挑了一种学习,有兴趣的可以 点击这里

/**
 * 函数方式(递归)
 * @param arr 数组
 * @returns {*} 一维数组,全新的对象
 */
function fn(arr){
    return arr.reduce((prev,cur)=>{
        return prev.concat(Array.isArray(cur)?fn(cur):cur)
    },[])
}

// 给 Array 新增一个属性用于扁平化多维数组(递归)
Array.prototype.pia = function () {
    return this.reduce((prev, cur) => prev.concat(Array.isArray(cur) ? cur.pia() : cur),[]);
};

let arr = [1, [2, 3, [4, 5], 6, [7, [8, [9, [10]]]]]];
console.log("多维数组 函数调用fn(arr) --- " + fn(arr));    //使用函数方式扁平化多维数组
console.log("多维数组 属性调用arr.pia() --- " + arr.pia());  //使用属性扁平化多维数组

//如果只是像单纯的扁平化 二维数组 可以直接扁平就好了

let arr2 = [[1,2,3],[4,5,6],[7,8],9]
arr2 = arr2.reduce((prev, cur) => prev.concat(cur), []); //仅扁平化二维数组就不用递归了
console.log("二维数组 --- "+arr2);
上一篇下一篇

猜你喜欢

热点阅读