Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Object Deep Copy with deep clone
(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
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 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);
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (4)
Previous results
Fork
Test case name
Result
Recursive Deep Copy
JSON Deep Copy
lodash clone
deepclone
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):
I'll do my best to help you with the code snippet and benchmark results. **Code Snippet Analysis** The provided JavaScript code snippet appears to be a template for benchmarking different methods of copying or cloning an object. It defines four test cases: 1. `Recursive Deep Copy` 2. `JSON Deep Copy` (using `jsonDeepCopy` function) 3. `lodash clone` (using Lodash's `cloneDeep` function) 4. `deepclone` The code uses the `dimensions` object as a sample input for these tests. **Benchmark Results Analysis** The benchmark results are provided in two formats: 1. **Raw JSON Format**: The first part of the response is a raw JSON string containing an array of objects with various keys, including `Benchmark Definition`, `Test Name`, and others. 2. **Human-Readable Format**: The second part of the response is a human-readable format with more descriptive field names. Both formats seem to contain the benchmark results for each test case, along with some metadata such as browser, device platform, operating system, executions per second, and test name. **Observations** From the provided data, I can observe that: * The `Recursive Deep Copy` test appears to be the fastest among all four tests. * The `JSON Deep Copy` test is slightly slower than the `recursiveDeepCopy` implementation but faster than the `lodash clone` and `deepclone` implementations. Please note that this analysis is based on limited data, and more information would be required to draw more concrete conclusions about the performance of these different cloning methods.
Related benchmarks:
Object Deep Copy with deep clone 3
Object Deep Copy with deep clone 34
Object Deep Copy with deep clone 3445123234
Object Deep Copy with deep clone 34451232342323
Comments
Confirm delete:
Do you really want to delete benchmark?