Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Object Deep Copy with deep clone 34451232342323
(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) { let result = Array.isArray(obj) ? [] : {}; const keys = Object.keys(result); const length = keys.length; for (let i = length; i > 0; i--) { let key = keys[i]; result[key] = typeof obj[key] === 'object' ? recursiveDeepCopy2(obj[key]) : obj[key]; } return result; } function cloneArray(a, cloneObject) { const keys = Object.keys(a); const a2 = new Array(keys.length); for (let i = 0; i < keys.length; i++) { const k = keys[i]; const cur = a[k]; if (typeof cur !== 'object' || cur === null) { a2[k] = cur; } else { a2[k] = cloneObject(cur); } } return a2; } function deepClone(o) { if (typeof o !== 'object' || o === null) { return o; } if (Array.isArray(o)) { return cloneArray(o, deepClone); } const o2 = {}; for (const k in o) { if (Object.hasOwnProperty.call(o, k) === false) { continue; } const cur = o[k]; if (typeof cur !== 'object' || cur === null) { o2[k] = cur; } else { o2[k] = deepClone(cur); } } return o2; } 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):
Based on the provided data, I will attempt to answer the question. It appears that we are dealing with benchmarking results for different JavaScript functions used for deep copying. The functions being compared are: 1. `recursiveDeepCopy` 2. `jsonDeepCopy` 3. `_.cloneDeep` (from Lodash) 4. `deepClone` The latest benchmark result shows that the function with the fastest execution time is `Recursive Deep Copy 2`, which has an average of 1996242.375 executions per second. Comparing the execution times, we can see that: * `recursiveDeepCopy 2` is the fastest * `jsonDeepCopy` is slower than `Recursive Deep Copy 2` * `lodash clone` (`.cloneDeep`) is slower than `JSON Deep Copy` * `deepClone` is slower than `Recursive Deep Copy` Based on these results, it seems that `recursiveDeepCopy 2` has the fastest execution time. However, without more information about the implementation of these functions and the specific use case being benchmarked, it's difficult to provide a definitive answer. Would you like me to help with anything else?
Related benchmarks:
Object Deep Copy with deep clone 3
Object Deep Copy with deep clone 34
Object Deep Copy with deep clone 344
Object Deep Copy with deep clone 3445123234
Comments
Confirm delete:
Do you really want to delete benchmark?