Лучший способ реорганизовать массив объектов - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно реорганизовать массив связанных объектов по идентификатору только в один объект дерева. Уровень глубины неизвестен, поэтому я думаю, что это нужно делать рекурсивно. Каков наиболее эффективный способ?

У меня есть следующий массив объектов:

const arrObj = [
  {
    "id": 1,
    "children": [
      {
        "id": 2
      },
      {
        "id": 3
      }
    ]
  },
  {
    "id": 2,
    "children": [
      {
        "id": 4
      },
      {
        "id": 5
      }
    ]
  },
  {
    "id": 3,
    "children": [
      {
        "id": 6
      }
    ]
  },
  {
    "id": 4
  }
]

Я хочу реструктурировать только один объект, например дерево:

const treeObj = {
  "id": 1,
  "children": [
    {
      "id": 2,
      "children": [
        {
          "id": 4
        },
        {
          "id": 5
        }
      ]
    },
    {
      "id": 3,
      "children": [
        {
          "id": 6
        }
      ]
    }
  ]
}

Каждый объект имеет множество других свойств.

1 Ответ

1 голос
/ 06 августа 2020

Вы можете использовать рекурсивную функцию сопоставления для всех children.

const arrObj = [ { "id": 1, "children": [ { "id": 2 }, { "id": 3 } ] }, { "id": 2, "children": [ { "id": 4 }, { "id": 5 } ] }, { "id": 3, "children": [ { "id": 6 } ] }, { "id": 4 } ];
const res = arrObj[0];//assuming the first element is the root
res.children = res.children.map(function getChildren(obj){
  const child = arrObj.find(x => x.id === obj.id);
  if(child?.children) child.children = child.children.map(getChildren);
  return child || obj;
});
console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...