通过深度超过2级的条件合并嵌套对象

时间:2019-06-06 23:50:12

标签: javascript javascript-objects nested-loops

我有一个非常简单的对象数组:

[
  { category: 'A', level: 'Aa', sublevel: 'Aaa' },
  { category: 'A', level: 'Aa', sublevel: 'Aab' },
  { category: 'A', level: 'Ab', sublevel: 'Abb' },
  { category: 'B', level: 'Ac', sublevel: 'Abc' }
]

子级别始终是唯一的,级别和类别可以相同。
我想从该数组创建以下对象:

[
  { 
    category: 'A',
    children: [
      {
        level: 'Aa',
        children: [
          {
            sublevel: 'Aaa'
          },
          {
            sublevel: 'Aab'
          }
        ]
      },
      {
        level: 'Ab',
        children: [
          {
            sublevel: 'Abb'
          }
        ]
      }
    ]
  },
  { 
    category: 'B',
    children: [
      {
        level: 'Ac',
        children: [
          {
            sublevel: 'Abc'
}] }] }]

换句话说,如果有两个具有相同类别的对象,我想将category合并为一个,并将其级别放入数组children中。如果还存在具有相同类别和级别的对象,则将相同级别合并为一个并将子级别放置到相关数组children中。

使用[].map[].reduce以及各种循环实际上无法遍历数组。还尝试过lodash mergeWith和deepmerge,但是子级似乎对它们不可见。

在超过2级深度的条件下构造对象的优雅方法是什么?

1 个答案:

答案 0 :(得分:0)

您只需要在原始数组上带有嵌套过滤器/贴图的reducer。

##