Как преобразовать один объект в другой, используя рекурсию.Javascript - PullRequest
0 голосов
/ 21 ноября 2018

Я не знаю пути, поэтому мне нужна помощь, пожалуйста.Итак, у меня есть этот объект

{   
"label": "root",
    "children": [
        {
            "label": "a",
            "value": "abc"
        },
        {
            "label": "b",
            "value": 123
        },
        {
            "label": "c",
            "children": [
                {
                    "label": 0,
                    "children": [
                        {
                            "label": "d",
                            "value": "def"
                        },
                        {
                            "label": "e",
                            "value": 1
                        },
                        {
                            "label": "f",
                            "children": [
                                {
                                    "label": 0,
                                    "children": [
                                        {
                                            "label": "g",
                                            "value": "ghi"
                                        },
                                        {
                                            "label": "h",
                                            "value": 456
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "label": 1,
                    "children": [
                        {
                            "label": "i",
                            "value": 1
                        },
                        {
                            "label": "j",
                            "value": "abc"
                        },
                       {
                            "label": "asd",
                            "children": [
                                {
                                    "label": 0,
                                    "children": [
                                        {
                                            "label": "qwe",
                                            "value": "kuracpalac"
                                        },
                                        {
                                            "label": "rtz",
                                            "value": "asdasdasdasd"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

, и он мне нужен, чтобы преобразовать его в новый объект, похожий на этот:

const obj = {
  a: "abc",
  b: 123,
  c: [
    {
      d: "def",
      e: 1,
      f: [
        {
          g: "ghi",
          h: 456
        }
      ]
    },
    {
      i: 1,
      j: "abc",
      asd: {
        qwe: "kuracpalac",
        rtz: "asdasdasdasd"
      }
    }
  ]
};

Спасибо за помощь:)!

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать две функции, одну для получения либо массива, в зависимости от ключей, целочисленных значений или назначенного объекта.Другая функция возвращает объект с новой парой ключ / значение, либо значением, либо структурой вложенного объекта дочернего массива.

function assign(array) {
    return Object.assign(0 in array[0] ? [] : {}, ...array);
}

function getObject({ label, value, children }) {
    return { [label]: value || assign(children.map(getObject)) };
}

var data = { label: "root", children: [{ label: "a", value: "abc" }, { label: "b", value: 123 }, { label: "c", children: [{ label: 0, children: [{ label: "d", value: "def" }, { label: "e", value: 1 }, { label: "f", children: [{ label: 0, children: [{ label: "g", value: "ghi" }, { label: "h", value: 456 }] }] }] }, { label: 1, children: [{ label: "i", value: 1 }, { label: "j", value: "abc" }, { label: "asd", children: [{ label: 0, children: [{ label: "qwe", value: "kuracpalac" }, { label: "rtz", value: "asdasdasdasd" }] }] }] }] }] },
    result = getObject(data).root;

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...