È possibile riscrivere la seguente funzione ricorsiva JavaScript per renderla più veloce?Uso dello stile iterativo per clonare un oggetto in 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;
}
ho riscritto in uno stile iterativo, ma non guadagna qualsiasi prestazione, infatti la velocità è sceso da ≈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
Ebbene si può riscrivere un algoritmo ricorsivo per utilizzare un algoritmo iterativo, che a volte è necessario se la ricorsione sta andando troppo in profondità, ma non si dispone di un motivo per voler passare a continuazione passando in particolare? Penso che l'algoritmo ricorsivo esistente sarà più facile da seguire ... – nnnnnn
Mi piacerebbe vedere anche una versione iterativa. – NVI
Ho cambiato la domanda.L'unico obiettivo è renderlo più veloce. – NVI