首页 > 解决方案 > 组合对象数组中父键相同的子对象

问题描述

我有一个具有重复父键的对象数组:

[
    {parent1: {'child_id_1': 'value_child_1'}}
    {parent1: {'child_id_1_1': 'value_child_1_1'}}
    {parent2: {'child_id_2_1': 'value_child_2_1'}}
    {parent2: {'child_id_2_2': 'value_child_2_2'}}
    {parent2: {'child_id_2_3': 'value_child_2_3'}}
    ...
]

我正在寻找这个结果:

[
    {parent1: {'child_id_1': 'value_child_1'}, {'child_id_1_1': 'value_child_1_1'}}
    {parent2: {'child_id_2_1': 'value_child_2_1'}, {'child_id_2_2': 'value_child_2_2'}, {'child_id_2_3': 'value_child_2_3'}}
]

我已经尝试过与下面类似的方法,但它只返回一个密钥对。

const unique = Array.from(new Set(filteredViews.map(a => a.id)))
   .map(id => {
       return filteredViews.find(a => a.view_name === id)
})

任何帮助将不胜感激

标签: javascript

解决方案


假设您的数据如下所示:

const data = [
  {parent1: {'child_id_1': 'value_child_1'}},
  {parent1: {'child_id_1_1': 'value_child_1_1'}},
  {parent2: {'child_id_2_1': 'value_child_2_1'}},
  {parent2: {'child_id_2_2': 'value_child_2_2'}},
  {parent2: {'child_id_2_3': 'value_child_2_3'}},
]

使用香草方法,您可以这样做:

let unique = {};

data.forEach(d => {
  let key = Object.keys(d)[0]; // assuming your object has a single key
  if (!unique[key]) { unique[key] = []; }
  unique[key].push(d[key]);
});

导致:

{
  "parent1": [
     {"child_id_1":"value_child_1"}, 
     {"child_id_1_1":"value_child_1_1"}
  ],
  "parent2": [
     {"child_id_2_1":"value_child_2_1"},
     {"child_id_2_2":"value_child_2_2"},
     {"child_id_2_3":"value_child_2_3"}
  ]
}

推荐阅读