Test name | Executions per second |
---|---|
JSON.parse(JSON.stringify()) | 719232.6 Ops/sec |
structuredClone() | 614901.4 Ops/sec |
fast_deep_clone() | 1704037.6 Ops/sec |
var obj = {
description: 'Creates a deep copy of source, which should be an object or an array.',
myNumber: 123456789,
myBoolean: true,
jayson: {
stringify: 'JSON.stringify() method converts a JavaScript value to a JSON string....',
parse: 'JSON.parse() method parses a JSON string...'
}
};
var myCopy = null;
JSON.parse(JSON.stringify(obj));
structuredClone(obj);
const fast_deep_clone = (obj) => {
function cloneArray(a, fn) {
var keys = Object.keys(a);
var a2 = new Array(keys.length)
for (const key of keys) {
var k = keys[key];
var cur = a[k];
if (typeof cur !== 'object' || cur === null) {
a2[k] = cur;
} else {
a2[k] = fn(cur);
}
}
return a2;
}
if (typeof obj !== 'object' || obj === null) return obj;
if (obj instanceof Date) return new Date(obj);
if (Array.isArray(obj)) return cloneArray(obj, fast_deep_clone);
if (obj.toString() !== '[object Object]') {
return obj.toString();
}
let value, key;
const keys = Object.keys(obj);
const outObject = {};
for (key of keys) {
if (key) {
value = obj[key];
outObject[key] = fast_deep_clone(value);
}
}
return outObject;
};
fast_deep_clone(obj);