Test name | Executions per second |
---|---|
JSON.stringify | 538828.2 Ops/sec |
structuredClone | 481663.2 Ops/sec |
cloneLineageData | 660550.0 Ops/sec |
lodash.cloneDeep | 507855.0 Ops/sec |
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
var MyObject = {
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...'
},
mySet: new Set([1,2,3,1]),
myList: [1,3,4,5,67,'ab'],
myDate: new Date(),
};
var myCopy = null;
myCopy = JSON.parse(JSON.stringify(MyObject));
myCopy = structuredClone(MyObject);
const cloneLineageData = (toClone) => {
if (typeof toClone !== 'object' || toClone === null) return toClone;
if (toClone instanceof Set) {
return new Set(toClone);
}
if (Array.isArray(toClone)) {
return toClone.map(cloneLineageData);
}
if (toClone instanceof Date) {
return new Date(toClone);
}
const cloned = { toClone };
const clonedObjKeys = Object.keys(cloned);
for (let i = 0; i < clonedObjKeys.length; i += 1) {
const key = clonedObjKeys[i];
cloned[key] = cloneLineageData(cloned[key]);
}
return cloned;
};
myCopy = cloneLineageData(MyObject);
myCopy = _.cloneDeep(MyObject);