美文网首页
JS 二维数组多维数组拍平扁平化

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

作者: 夹板儿孩 | 来源:发表于2020-09-15 23:50 被阅读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);
    

    相关文章

      网友评论

          本文标题:JS 二维数组多维数组拍平扁平化

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