数组扁平化总结


所谓扁平化就是将一个多维数组转变成一维数组,可用于单个接口多场景下的数据处理。

例如,某接口返回一个二维数组的category数据,0下标下是收入分类,1下标下是支出分类。这个数据在记账页面上可以直接用于收入和支出两个局部模块,但在列表页下需要将两个数据进行一个合并处理。这时就需要到扁平化的概念。

递归

Array.prototype.flat = function(arr){
    //使用map遍历并拷贝响应结果
    let result = arr.map((item)=>{
    if(Array.isArray(item)){
        //递归数组,达到降维的作用
        return flat(item)
    }else{
        //返回普通元素,构成一维数组
        return item;
    }
})
//result值因为递归的原因最高只有二维,那么使用...解构就能得到多个元素和一维数组;concant方法接收单个元素或数组,那么最后就能返回一个一维数组啦
    return [].concat(...result);
}

不使用concat进行扁平化:

concat是接收一个值或数组进行浅拷贝,那么我们再写一个能接收多个参数进行push的函数就行了

/**
 * @description 拷贝n个数组或value
 * @params {*} valArr n个数组或value
 **/
function pushVal(...valArr){
    let res =[];
    for(val of valArr){
        if(Array.isArray(val)){
            for(i of val){
                res.push(i);
            }
        }else{
            res.push(val);
        }
    }
    return res;
}

当然js在数组原型上实现了flat方法,所以平时的时候可以使用

Array.prototype.flat(infinite)

文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论
  目录