【问题标题】:Get all the nested arrays from main array and merge each of them according to keys Knockout.Js从主数组中获取所有嵌套数组并根据键合并每个数组 Knockout.Js
【发布时间】:2019-12-01 12:03:38
【问题描述】:

我正在尝试将所有嵌套数组与相同的键合并,有超过 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/

【问题讨论】:

  • 请添加预期的输出。
  • 问题已更新

标签: javascript arrays knockout.js


【解决方案1】:

你可以reduce 数组。在里面,循环遍历每个对象的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)

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2017-06-17
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多