嵌套结构最快的对象重新映射

时间:2020-03-03 16:42:29

标签: javascript performance ecmascript-6 javascript-objects

假设我们有来自两个不同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 :(得分:0)

在运行时方面,您说得对,这可能是我们可以通过O(n)获得的最快速度。

您可以通过将解决方案从递归转换为迭代来提高空间复杂度。 saves space on the callstack可以在极端情况下帮助树木深入树木。