Как преобразовать массив вложенных объектов в объект с ключом, парами значений в JavaScript - PullRequest
0 голосов
/ 30 января 2020

У меня есть массив вложенных объектов, и я хотел бы немного его упростить и преобразовать в объект с парами ключ-значение, поэтому результат будет следующим:

Простой объект:

{Groceries: {
    'Organic eggs': null,
    Fruits: {
        Apple: null,
        Berries: {
            Blueberry: null,
            Raspberry: null
        }
    }
}}

Массив вложенных объектов:

const tree = [{
    "id": 1,
    "name": "Groceries",
    "parentId": null,
    "children": [{
            "id": 3,
            "name": "Organic eggs",
            "parentId": 1,
            "children": []
        }, {
            "id": 5,
            "name": "Fruits",
            "parentId": 1,
            "children": [{
                    "id": 6,
                    "name": "Apple",
                    "parentId": 5,
                    "children": []
                },{
                    "id": 7,
                    "name": "Berries",
                    "parentId": 5,
                    "children": [{
                            "id": 8,
                            "name": "Blueberry",
                            "parentId": 7,
                            "children": []
                        },{
                            "id": 9,
                            "name": "Raspberry",
                            "parentId": 7,
                            "children": []
                        }]
                }]
        }]
}]

1 Ответ

1 голос
/ 30 января 2020

Используя рекурсию, вы можете передать свой массив tree и l oop через него. Если вы встретите объект в своем массиве дерева, у которого есть дочерние элементы, вы можете передать этот дочерний массив обратно в свою функцию, чтобы построить новый упрощенный объект из этого подмассива. Если длина свойства children объекта 0, тогда вы можете установить для свойства упрощенного имени объекта значение null.

См. Пример ниже:

const tree = [{ "id": 1, "name": "Groceries", "parentId": null, "children": [{ "id": 3, "name": "Organic eggs", "parentId": 1, "children": [] }, { "id": 5, "name": "Fruits", "parentId": 1, "children": [{ "id": 6, "name": "Apple", "parentId": 5, "children": [] }, { "id": 7, "name": "Berries", "parentId": 5, "children": [{ "id": 8, "name": "Blueberry", "parentId": 7, "children": [] }, { "id": 9, "name": "Raspberry", "parentId": 7, "children": [] }] }] }] }];

const simplifyObj = arr => {
  const obj = {};
  for(const {name, children} of arr)
    obj[name] = children.length ? simplifyObj(children) : null;
  return obj;
}

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