是否可以重寫下面的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