Преобразуйте дерево из формата graphql в формат json в javascript - PullRequest
1 голос
/ 21 ноября 2019

Я пытаюсь преобразовать свои данные на стороне клиента из этого формата:

[{
    "id": 1,
    "name": "dad",
    "parent": [],
    "children": [{
            "group": {
                "id": 2,
                "name": "child1",
                "parent": [{
                    "parent": 1
                }]
            }
        },
        {
            "group": {
                "id": 3,
                "name": "child2",
                "parent": [{
                    "parent": 1
                }]
            }
        },
        {
            "group": {
                "id": 8,
                "name": "child3",
                "parent": [{
                    "parent": 1
                }]
            }
        }
    ]
}]

в этот формат:

[{
    id: 1,
    name: "parent",
    parent: null,
    children: [{
            id: 2,
            name: "child1",
            parent: {
                id: 1
            },
            children: []
        },
        {
            id: 3,
            name: "child2",
            parent: {
                id: 1
            },
            children: []
        }
    ]
}]

ключевые моменты:

  1. Все ключи не должны быть в строковом типе
  2. «Родитель» должен просто включать идентификатор родительского
  3. объект «группа» должен быть удален - а его содержимое должно просто заменить его

Я не могу найти библиотеку преобразований в npm для использования, и мне нужно, чтобы данные были в таком точном формате, чтобы использовать их в компоненте реагировать по вертикали (не найдено никакой другойхорошо выглядящий вертикальный компонент дерева в реакции).

1 Ответ

1 голос
/ 21 ноября 2019

Вы можете отобразить новые объекты с преобразованными частями.

const convert = o => {
    var children;
    if ('group' in o) o = o.group;
    if ('children' in o) children = o.children.map(convert);
    return Object.assign({}, o, { parent: o.parent.length ? { id: o.parent[0].parent } : null }, children && { children });
};

var data = [{ id: 1, name: "dad", parent: [], children: [{ group: { id: 2, name: "child1", parent: [{ parent: 1 }] } }, { group: { id: 3, name: "child2", parent: [{ parent: 1 }] } }, { group: { id: 8, name: "child3", parent: [{ parent: 1 }] } }] }],
    result = data.map(convert);

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