可能只是“5点以后的星期五,我想回家”的效果,但我对这个问题很难过。我有一个递归迭代器方法,我将调用每个:
function canIterate(obj) {
return (obj && (typeof obj === 'object' || Array.isArray(obj)));
}
function each(obj, onSuccess, recursive) {
if (canIterate(obj)) {
Object.keys(obj).forEach(function(key) {
var val = obj[key];
if (onSuccess && val && key) {
var quit = onSuccess(val, key);
if (false === quit) {
return false;
}
}
if (true === recursive) {
each(val, onSuccess, true);
}
});
}
}
这对大型数据集来说非常慢(我将在下面解释)。正如@raganwald在此解释的那样,Trampolines are the solution to the problem.。 我的问题是:我如何重构这个递归函数以利用蹦床技术?
所以我有一个轮询机制来请求树的当前状态,在这种情况下,它是一个位置树,看起来像:
Hospital Campus Main
Main Building
Radiology Department
Lab 1
Lab 2
MRI Lab
Machine Cabinets
Spare Parts Shelf
树在属于位置的事物的网格中呈现,并且对于具有位置的网格中的每一行,我需要将树设置为根设置到该行的位置。所以,如果我们有:
Part | Location | Tree
widget MRI Lab MRI Lab > Machine Cabinets > Spare Parts Shelf
所以不要紧,在服务器端可以处理部分或全部内容 - 我将优化稍后提取数据的性能。
是否有一种有效的方法可以重写我的每种方法以使用Trampoline或CPS style?