Максимально возможное переназначение объекта для вложенной структуры - PullRequest
0 голосов
/ 03 марта 2020

Предположим, у нас есть две разные структуры из двух разных API. У каждого своя схема.

Мы получаем это как возврат из API # 1

[
    {
        Id: "test1",
        Title: "label 1",
        Children: [
            {
                Id: "test2",
                Title: "label 2",
                Children: [
                    {
                        Id: "test3",
                        Title: "label 3"
                    }
                ]
            }
        ]
    }
]

Мне нужно преобразовать его в следующую схему:

[
    {
        value: "test1",
        label: "label 1",
        children: [
            {
                value: "test2",
                label: "label 2",
                children: [
                    {
                        value: "test3",
                        label: "label 3"
                    }
                ]
            }
        ]
    }
]

До сих пор я придумал этот метод:

const transformItem = ({ Id, Title, Children }) => ({
  value: Id,
  label: Title,
  children: Children ? transformData(Children) : null
});

const transformData = arr => arr.map(item => transformItem(item));

// Process data
const DataForApi2 = transformData(DataFromApi1);

Из проведенного ограниченного бенчмаркинга и из того, что я могу сказать, в V8 (что составляет 95 +% от нашей пользовательской базы) это выглядит достаточно быстро, так как я я не изменяю никакую структуру данных (например, горячие объекты не повреждены и сохраняют производительность) и использую все, что находится в области видимости, чтобы не тратить впустую память. Кажется, имеет линейную сложность и не так уж плохо, если выполняется только один раз для каждого клиента, загружающего приложение (только в первый раз после входа в систему).

1 Ответ

0 голосов
/ 03 марта 2020

С точки зрения времени выполнения вы правы, это, пожалуй, самый быстрый способ получить O(n).

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

...