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));