Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Object Deep Copy with deep clone 344
(version: 0)
Produce a deep copy of a Javascript object where nested objects are not simply references to the originals.
Comparing performance of:
Recursive Deep Copy vs JSON Deep Copy vs lodash clone vs deepclone vs Recursive Deep Copy 2
Created:
5 years ago
by:
Guest
Jump to the latest result
HTML Preparation code:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
Script Preparation code:
function recursiveDeepCopy(obj) { return Object.keys(obj).reduce((v, d) => Object.assign(v, { [d]: (obj[d].constructor === Object) ? recursiveDeepCopy(obj[d]) : obj[d] }), {}); } function recursiveDeepCopy2(obj) { return Object.keys(obj).reduce((v, d) => Object.assign(v, { [d]: Object.assign(v, { [d]: obj[d] && obj[d].constructor === Object ? recursiveDeepCopy2(obj[d]) : obj[d] }) }), {}); } function deepClone(object) { let result; let i; let l; if (typeof object !== 'object') { return object; } if (!object) { return object; } if (object.constructor === Array) { result = []; l = object.length; for (i = 0; i < l; i++) { result[i] = deepClone(object[i]); } return result; } result = {}; for (i in object) { result[i] = deepClone(object[i]); } return result; } function jsonDeepCopy(o) { return JSON.parse(JSON.stringify(o)); } var dimensions = [{ "dimensions": [{ "runtime": { "common": { "client": null, "server": null } } }, { "device": { "android": null, "blackberry": null, "iemobile": null, "iphone": null, "ipad": null, "kindle": null, "opera-mini": null, "palm": null } }, { "environment": { "development": { "dev": null, "test": null }, "production": { "stage": null, "prod": null } } }, { "lang": { "ar": { "ar-JO": null, "ar-MA": null, "ar-SA": null, "ar-EG": null }, "bn": { "bn-IN": null }, "ca": { "ca-ES": null }, "cs": { "cs-CZ": null }, "da": { "da-DK": null }, "de": { "de-AT": null, "de-DE": null }, "el": { "el-GR": null }, "en": { "en-AU": null, "en-BG": null, "en-CA": null, "en-GB": null, "en-GY": null, "en-HK": null, "en-IE": null, "en-IN": null, "en-MY": null, "en-NZ": null, "en-PH": null, "en-SG": null, "en-US": null, "en-ZA": null }, "es": { "es-AR": null, "es-BO": null, "es-CL": null, "es-CO": null, "es-EC": null, "es-ES": null, "es-MX": null, "es-PE": null, "es-PY": null, "es-US": null, "es-UY": null, "es-VE": null }, "fi": { "fi-FI": null }, "fr": { "fr-BE": null, "fr-CA": null, "fr-FR": null, "fr-GF": null }, "hi": { "hi-IN": null }, "hu": { "hu-HU": null }, "id": { "id-ID": null }, "it": { "it-IT": null }, "ja": { "ja-JP": null }, "kn": { "kn-IN": null }, "ko": { "ko-KR": null }, "ml": { "ml-IN": null }, "mr": { "mr-IN": null }, "ms": { "ms-MY": null }, "nb": { "nb-NO": null }, "nl": { "nl-BE": null, "nl-NL": null, "nl-SR": null }, "pl": { "pl-PL": null }, "pt": { "pt-BR": null }, "ro": { "ro-RO": null }, "ru": { "ru-RU": null }, "sv": { "sv-SE": null }, "ta": { "ta-IN": null }, "te": { "te-IN": null }, "th": { "th-TH": null }, "tr": { "tr-TR": null }, "vi": { "vi-VN": null }, "zh": { "zh-Hans": { "zh-Hans-CN": null }, "zh-Hant": { "zh-Hant-HK": null, "zh-Hant-TW": null } } } }] }]
Tests:
Recursive Deep Copy
var dimensionsCopy = recursiveDeepCopy(dimensions);
JSON Deep Copy
var dimensionsCopy = jsonDeepCopy(dimensions);
lodash clone
var dimensionsCopy = _.cloneDeep(dimensions);
deepclone
var dimensionsCopy = deepClone(dimensions);
Recursive Deep Copy 2
var dimensionsCopy = recursiveDeepCopy2(dimensions);
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (5)
Previous results
Fork
Test case name
Result
Recursive Deep Copy
JSON Deep Copy
lodash clone
deepclone
Recursive Deep Copy 2
Fastest:
N/A
Slowest:
N/A
Latest run results:
No previous run results
This benchmark does not have any results yet. Be the first one
to run it!
Autogenerated LLM Summary
(model
llama3.2:3b
, generated one year ago):
It seems like you're preparing for a competitive programming challenge or a benchmarking test, where you need to compare the performance of different methods for deep copying objects. Based on the provided information, here's my analysis: 1. **Benchmark Results**: The latest benchmark results show that: * `Recursive Deep Copy` is the fastest method, with an average execution time of 253.89 seconds per second. * `JSON Deep Copy` is slower, with an average execution time of 241.98 seconds per second. * `lodash clone` is also relatively slow, with an average execution time of 152.04 seconds per second. * `deepclone` is the slowest method, with an average execution time of 211.18 seconds per second. 2. **Individual Test Cases**: The provided individual test cases show that: * `recursiveDeepCopy`, `jsonDeepCopy`, and `_.cloneDeep` are essentially doing similar operations. * `deepClone` is likely a slower implementation or a wrapper around another method. **Conclusion**: Given the benchmark results, it appears that `Recursive Deep Copy` is the fastest method for deep copying objects. If you're tasked with implementing this functionality, consider using a recursive approach to copy nested objects and arrays. Here's an example of how you could implement `recursiveDeepCopy` in JavaScript: ```javascript function recursiveDeepCopy(obj) { if (typeof obj !== 'object' || obj === null) return obj; const result = Array.isArray(obj) ? [] : {}; for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { result[key] = recursiveDeepCopy(obj[key]); } } return result; } ``` This implementation recursively traverses the object graph and creates a new copy of each nested object or array. Keep in mind that this is just one possible implementation, and you may need to optimize it further based on your specific requirements.
Related benchmarks:
Object Deep Copy with deep clone 3
Object Deep Copy with deep clone 34
Object Deep Copy with deep clone 3445
Object Deep Copy with deep clone 34451232342323
Comments
Confirm delete:
Do you really want to delete benchmark?