假设我们有来自两个不同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%以上)中,这看起来足够快,因为我没有对任何数据结构进行变异(有效的对象保持完整并保持了性能) ),并在范围内使用所有内容,以免浪费内存。如果每个客户端加载该应用程序仅执行一次(仅在登录后的第一次),则似乎具有线性复杂性,并且还不错。
答案 0 :(得分:0)
在运行时方面,您说得对,这可能是我们可以通过O(n)
获得的最快速度。
您可以通过将解决方案从递归转换为迭代来提高空间复杂度。 saves space on the callstack可以在极端情况下帮助树木深入树木。