是否可以重写下面的JavaScript递归函数以使其更快?使用迭代风格在JavaScript中克隆对象
function clone_recursive(object) {
var result = {};
for (var key in object) {
var value = object[key];
if (typeof value === 'object') {
result[key] = clone_recursive(value);
} else {
result[key] = value;
}
}
return result;
}
我重写了它在迭代风格,但它并没有获得任何性能,实际上速度≈20%下降。
function clone_iterative(object) {
var result = {};
var queue = [{base: result, value: object}];
var item;
while (item = queue.shift()) {
var current = item.value;
var base = item.base;
for (var key in current) {
var value = current[key];
if (typeof value === 'object') {
var resultValue = base[key] = {};
queue.push({base: resultValue, value: value});
} else {
base[key] = value;
}
}
}
return result;
}
http://jsperf.com/clone-an-object/13
那么你可以重写一个递归算法使用迭代算法,这有时是必要的,如果递归会太深,但你有一个理由要移动到延续专门传递?我认为现有的递归算法会更容易遵循... – nnnnnn
我希望看到一个迭代版本。 – NVI
我改变了问题。唯一的目标是加快速度。 – NVI