从主数组中获取所有嵌套数组,并根据键 Knockout.Js 合并每个嵌套数组

Get all the nested arrays from main array and merge each of them according to keys Knockout.Js

我想合并所有具有相同键的嵌套数组,有超过 100 个嵌套数组,我希望当键相同时将它们全部合并。

我尝试用更难的方式合并数组(我不想要这样,因为我有 100 多个嵌套数组)。

var keys = [];
var stream = {arr1: [], arr2:[], arr3:[]}; // Nested Arrays
for(var i =0;i<arr_main.length;i++){
  for(var key in arr_main[i]){
   if(keys.find(x => x === key))
   {
     if(key == "arr1")
     {
     let arr = stream.arr1
     let union = [...new Set([...arr, ...arr_main[i][key]])];
     stream.arr1 = union
     }
     else if(key == "arr2")
     {
     let arr = stream.arr2
     let union = [...new Set([...arr, ...arr_main[i][key]])];
     stream.arr2 = union
     }
     else if(key == "arr3")
     {
     let arr = stream.arr3
     let union = [...new Set([...arr, ...arr_main[i][key]])];
     stream.arr3 = union
     }
   }else{
     if(key == "arr1")
     stream.arr1 = arr_main[i][key]
     else if(key == "arr2")
     stream.arr2 = arr_main[i][key]
     else if(key == "arr3")
     stream.arr3 = arr_main[i][key]
   }
   if(!keys.find(x => x === key))
   keys.push(key);
  }
 }

预期输出:

{"arr1":[{"val1":"val1","val2":"val2"},{"val1":"val111","val2":"val222"}],"arr2":[{"val1":"val11","val2":"val22"},{"val1":"val1","val2":"val2"}],"arr3":[{"val1":"val111","val2":"val222"},{"val1":"val11","val2":"val22"}]}

Link to jsFiddle https://jsfiddle.net/kbjcsar6/13/

您可以 reduce the array. Inside, loop through the entries 每个对象。将每个键添加到累加器并合并它们。

const input=[{arr1:[{val1:"val1",val2:"val2"}],arr2:[{val1:"val11",val2:"val22"}],arr3:[{val1:"val111",val2:"val222"}]},{arr1:[{val1:"val111",val2:"val222"}],arr2:[{val1:"val1",val2:"val2"}],arr3:[{val1:"val11",val2:"val22"}]}];

const output = input.reduce((acc, o) => {
  Object.entries(o).forEach(([key, arr]) => {
    acc[key] = acc[key] || [];
    acc[key].push(...arr)
  })
  return acc
}, {})

console.log(output)