我有一个嵌套的对象结构,我对每个对象执行一系列操作,然后将其推送到一个数组。我目前的代码如下:
var item;
var final_data = [];
function walk (items, level) {
for (var i = 0; i < items.length; i++) {
item = items[i];
var final_item = Object.assign({}, item); // <-- required step, object's proper key/values must be cloned, but not recursively.
delete final_item.children; // final_item shouldn't have children
final_item.foo = level;
final_data.push(final_item);
if ("children" in item) walk(item.children, level + 1);
}
}
walk(my_data, 0);
我当前的代码按预期工作,因为它会使输入数据变平。
我的问题是,是否有办法改进该代码(性能明智)。
编辑:
my_data
是嵌套对象的数组,如下所示:
my_data = [
{a: 1, b: 2},
{a: 3, b: 8},
{a: 9, b: 3, children: [
{...}, {...}, {...}
]},
{...},
{..., children: [{}, {}, {}...]}
];
答案 0 :(得分:1)
我唯一可以立即看到的是通过将.length分配给变量来优化你的循环
即:
for (var i = 0, j = items.length; i < j; i++)
而不是
for (var i = 0; i < items.length; i++)
以下是另一篇文章的答案,以获得更多见解: Javascript Optimizing Loops
答案 1 :(得分:1)
要删除递归,我使用数组作为堆栈并访问&#34; my_data&#34;的所有节点。找出是否有孩子并将所有孩子推上堆叠。 然后,删除子项并在最终结果中推送受访节点
git merge --log --no-commit BranchB
git revert --no-commit BadCommit1 BadCommit2...
git commit
答案 2 :(得分:-1)
如果你想要表现,是的,它肯定会得到改善。 Object.assign是不必要的,并且在javascript中对象创建和销毁效率极低。与去除变量相比,赋予变量长度的增益可以忽略不计。