js操作二维数组

Js 操作二维数组合并

// 合并前数组
let dataCacheMode = [
    {
        objx: [1, 2, 3, 4, 5],
        objy1: [11, 12, 13, 14, 15],
        objy2: [22, 23, 24, 25, 26],
        objy3: [33, 34, 35, 36]
    },
    {
        objx: [6, 7, 8, 9, 10],
        objy1: [16, 17, 18, 19],
        objy2: [27, 28, 29, 30],
    },
    {
        objx: [6, 7, 8, 9, 10],
    },
    {
        aaa: [6, 7, 8, 9, 10],
    }
 ]
 // 合并后结果
let endResult = {
    "objx":[1,2,3,4,5,6,7,8,9,10,6,7,8,9,10],
    "objy1":[11,12,13,14,15,16,17,18,19],
    "objy2":[22,23,24,25,26,27,28,29,30],
    "objy3":[33,34,35,36],
    "aaa":[6,7,8,9,10]
 }
 // 实现代码
 let keysArr = dataCacheMode.map(d => {
     return Object.keys(d)
 }).flat();
let realKeysArr = [...new Set(keysArr)]
let result = {};
realKeysArr.forEach(d => {
    result[d] = []
})
dataCacheMode.map(d => {
   for (const key in result) {
       if (Object.hasOwnProperty.call(d, key)) {
            result[key] = [...result[key], ...d[key]]
       }
    }
})
console.log(result)
/**
需求变换
*/
// 合并前数组
let dataCacheMode1 = [
    {
       objx: [1, 2, 3, 4, 5],
       y: [
             [1, 2, 4, 4, 5],
             ['a1', 'a1'],
          ]
    },
    {
       objx: [6, 7, 8, 9, 10],
       y: [
            [5, 4, 3, 2, 1],
            ['a2', 'a2', 'a2', 'a2'],
            ['b2', 'b2', 'b2']
       ]
    }
]
// 合并后数组
let endResult1 = {
    "objx":[1,2,3,4,5,6,7,8,9,10],
    "y":[
        [1,2,4,4,5,5,4,3,2,1],
        ["a1","a1","a2","a2","a2","a2"],
        ["b2","b2","b2"]
    ]
}

//代码实现
        function isTwoDimensionalArray(arr){ // 判断二维数组
           return Array.isArray(arr) && arr.length && Array.isArray(arr[0]) && arr[0].length
        }
        function isObject(obj){
            return  Object.prototype.toString.call(obj) === '[object Object]'
        }
        function handelArr(dataCacheMode) {
            let keysArr = dataCacheMode.map(d => {
                return Object.keys(d)
            }).flat();
            let realKeysArr = [...new Set(keysArr)]
            let result = {};
            realKeysArr.forEach(d => {
                result[d] = []
            })
            dataCacheMode.map(d => {
                for (const key in result) {
                    if (Object.hasOwnProperty.call(d, key)) {
                        if (isTwoDimensionalArray(d[key])) {
                            let obj = { ...d[key] }
                            result[key].push(obj)
                        } else {
                            result[key] = [...result[key], ...d[key]]
                        }

                    }
                }
            })
            for (const key in result) {
                if (Object.hasOwnProperty.call(result, key)) {
                    if(isObject(result[key][0])){
                        let arr2 = []
                        let obj = handelArr( result[key]);
                        for (const key1 in obj) {
                            if (Object.hasOwnProperty.call(obj, key1)) {
                                arr2.push(obj[key1])
                            }
                        }
                        result[key] = arr2
                    }
                    
                }
            }
            return result;
        }
        console.log(handelArr(dataCacheMode1));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值