Как конвертировать литералы глубинных вложенных объектов в массив объектов? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь построить компонент treeselect, используя рамку пользовательского интерфейса Ant Design . Требование этого компонента - предоставить treeData в определенном формате (массив объектов), однако в моем приложении я получаюданные в виде литерала объекта, как показано ниже.

output = {"Node3":{
    "Node": "Node3",
    "children": {
        "Node3A" : {
            "Node": "Node3A",
            "children": {
                "Node3A1": {
                    "Node": "Node3A1",
                    "children": {
                        "Node3A1": {
                            "Node": "Node3A1x"
                        },
                        "Node3A1":{
                            "Node": "Node3A1y"
                        },
                        "Node3A1": {
                            "Node": "Node3A1z"
                        }
                    }
                },
                "Node3A2":{
                    "Node": "Node3A2"
                },
                "Node3A3":{
                    "Node": "Node3A3"
                }
            }
        }
    }}}

Я хотел бы преобразовать их в выходные данные, как показано ниже, чтобы я мог предоставить эти данные в виде treeData, чтобы получить желаемый вывод в дереве выбораcomponent.

{
    "Node": "Node3",
    "children": [
        {
            "Node": "Node3A",
            "children": [
                {
                    "Node": "Node3A1",
                    "children":
                        [
                            {
                                "Node": "Node3A1x"
                            },
                            {
                                "Node": "Node3A1y"
                            },
                            {
                                "Node": "Node3A1z"
                            }
                        ]
                },
                {
                    "Node": "Node3A2"
                },
                {
                    "Node": "Node3A3"
                }
            ]
        }

По сути, я хотел бы получить выходные данные таким образом, чтобы дочерние свойства литералов объекта были преобразованы в массив объектов.Ищете решение в Javascript (желательно ES6)

1 Ответ

0 голосов
/ 12 декабря 2018

const input = {
  "Node3": {
    "Node": "Node3",
    "children": {
      "Node3A": {
        "Node": "Node3A",
        "children": {
          "Node3A1": {
            "Node": "Node3A1",
            "children": {
              "Node3A1x": {
                "Node": "Node3A1x"
              },
              "Node3A1y": {
                "Node": "Node3A1y"
              },
              "Node3A1z": {
                "Node": "Node3A1z"
              }
            }
          },
          "Node3A2": {
            "Node": "Node3A2"
          },
          "Node3A3": {
            "Node": "Node3A3"
          }
        }
      }
    }
  }
};

function transform(obj) {
  if (obj.children) {
    obj.children = Object.values(obj.children).map(transform);
  }
  return obj;
}

const result = transform(Object.values(input).pop());
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...