Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Lodash cloneDeep vs for loop vs JSON parse vs recursive clone deep vs recursive reduce clone deep 2
compare object deep copy/clone methods
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Browser:
Chrome 126
Operating system:
Windows
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Lodash cloneDeep
4220.3 Ops/sec
JSON parse
9140.7 Ops/sec
For loop
230605.1 Ops/sec
Recursive clone deep
7431.0 Ops/sec
Recursive reduce clone deep
468126.0 Ops/sec
Custom Deep Copy
6710.1 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
Script Preparation code:
var obj = { "ORGDATA": [ { "Source": "C50.100", "TimeStamp": "20200723071251", "User": "DEVELOPER" }, { "SOLUTION": { "NAME": "Z_CUST_US", "ORGUNITS": { "CCD_PRIMARY": { "DATA": [ { "BUKRS_TGT": "1710", "BUKRS_SRC": "", "BUTXT": "Company Code 1710", "LAND1": "US", "ADRNR": "0000022835" } ] }, "CMP": { "DATA": [ { "RCOMP_TGT": "001710", "RCOMP_SRC": "", "NAME1": "Company 1710", "CNTRY": "US" } ] }, "DCH": { "DATA": [ { "VTWEG_TGT": "10", "VTWEG_SRC": "", "VTEXT": "Direct Sales" } ] }, "DIV": { "DATA": [ { "SPART_TGT": "00", "SPART_SRC": "", "VTEXT": "Product Division 00" } ] }, "EWN": { "DATA": [ { "LGNUM_TGT": "1750", "LGNUM_SRC": "", "LNUMT": "Warehouse" } ] }, "PLT": { "DATA": [ { "WERKS_TGT": "1710", "WERKS_SRC": "", "NAME1": "Plant 1 US", "LAND1": "US", "ADRNR": "0000022836" } ] }, "POR": { "DATA": [ { "EKORG_TGT": "1710", "EKORG_SRC": "", "EKOTX": "Purch. Org. 1710" } ] }, "SGR": { "DATA": [ { "VKGRP_TGT": "170", "VKGRP_SRC": "", "BEZEI": "Sales Group 170" } ] }, "SOF": { "DATA": [ { "VKBUR_TGT": "170", "VKBUR_SRC": "", "BEZEI": "Sales Office 170", "ADRNR": "0000022838" } ] }, "SOR": { "DATA": [ { "VKORG_TGT": "1710", "VKORG_SRC": "", "VTEXT": "Dom. Sales Org US", "LAND1": "US", "ADRNR": "0000022837" } ] }, "SPT_CUST_CONSMT": { "DATA": [ { "VSTEL_TGT": "171C", "VSTEL_SRC": "", "VTEXT": "Shipping Point 171C", "ALAND": "US", "ADRNR": "0000022855" } ] }, "SPT_RAW_MATNR": { "DATA": [ { "VSTEL_TGT": "171R", "VSTEL_SRC": "", "VTEXT": "Shipping Point 171R", "ALAND": "US", "ADRNR": "0000022842" } ] }, "SPT_STD": { "DATA": [ { "VSTEL_TGT": "1710", "VSTEL_SRC": "", "VTEXT": "Shipping Point 1710", "ALAND": "US", "ADRNR": "0000022839" } ] }, "STL_3RD_PARTY_WMS": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171I", "LGORT_SRC": "", "LGOBE": "3rd Party WMS", "LAND1": "US", "ADRNR": "0000022856" } ] }, "STL_3RD_PARTY_WMS_RET": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171K", "LGORT_SRC": "", "LGOBE": "3rd WMS - Return", "LAND1": "US", "ADRNR": "0000022857" } ] }, "STL_DAY_TANK": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171T", "LGORT_SRC": "", "LGOBE": "Day Tank", "LAND1": "US", "ADRNR": "0000022860" } ] }, "STL_EWM_INT_AFS": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "173S", "LGORT_SRC": "", "LGOBE": "EWM Int AFS", "LAND1": "US", "ADRNR": "" } ] }, "STL_EWM_INT_ROD": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "173D", "LGORT_SRC": "", "LGOBE": "EWM Int ROD", "LAND1": "US", "ADRNR": "" } ] }, "STL_KANBAN": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171E", "LGORT_SRC": "", "LGOBE": "KANBAN", "LAND1": "US", "ADRNR": "0000022845" } ] }, "STL_MAIN_TANK": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171Q", "LGORT_SRC": "", "LGOBE": "Main Tank", "LAND1": "US", "ADRNR": "0000022859" } ] }, "STL_RAW_MATNR": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171C", "LGORT_SRC": "", "LGOBE": "Raw Materials", "LAND1": "US", "ADRNR": "0000022843" } ] }, "STL_RET": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171R", "LGORT_SRC": "", "LGOBE": "Returns", "LAND1": "US", "ADRNR": "0000022844" } ] }, "STL_STD_A": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171A", "LGORT_SRC": "", "LGOBE": "Std. storage 1", "LAND1": "US", "ADRNR": "0000022840" }, { "WERKS": "1710", "LGORT_TGT": "171J", "LGORT_SRC": "", "LGOBE": "3rd WMS - Produc", "LAND1": "US", "ADRNR": "" }, { "WERKS": "1710", "LGORT_TGT": "171F", "LGORT_SRC": "", "LGOBE": "Residual SLoc", "LAND1": "US", "ADRNR": "0000022861" }, { "WERKS": "1710", "LGORT_TGT": "171M", "LGORT_SRC": "", "LGOBE": "DMC SLoc", "LAND1": "US", "ADRNR": "0000022862" } ] }, "STL_STD_B": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "171B", "LGORT_SRC": "", "LGOBE": "Std. storage 2", "LAND1": "US", "ADRNR": "0000022841" } ] }, "STL_WAREHOUSE": { "DATA": [ { "WERKS": "1710", "LGORT_TGT": "175W", "LGORT_SRC": "", "LGOBE": "Warehouse", "LAND1": "US", "ADRNR": "0000022858" } ] }, "WHN_3RD_PARTY": { "DATA": [ { "LGNUM_TGT": "172", "LGNUM_SRC": "", "LNUMT": "3rd Party WM Integration" } ] }, "WHN_CLOUD": { "DATA": [ { "LGNUM_TGT": "175", "LGNUM_SRC": "", "LNUMT": "Warehouse" } ] }, "WHN_EXTENDED": { "DATA": [ { "LGNUM_TGT": "173", "LGNUM_SRC": "", "LNUMT": "EWM Warehouse Integration" } ] }, "SLA": { "DATA": [ { "VKORG_TGT": "1710", "VKORG_SRC": "", "VTWEG_TGT": "10", "VTWEG_SRC": "", "SPART_TGT": "00", "SPART_SRC": "" } ] }, "PLTSORDCH": { "DATA": [ { "VKORG_TGT": "1710", "VKORG_SRC": "", "VTWEG_TGT": "10", "VTWEG_SRC": "", "WERKS_TGT": "1710", "WERKS_SRC": "" } ] } }, "RELATIONS": { "CCD_PRIMARY__CMP": [ { "BUKRS": "1710", "RCOMP": "001710" } ], "PLT__CCD_PRIMARY": [ { "WERKS": "1710", "BUKRS": "1710" } ], "STL_3RD_PARTY_WMS__PLT": [ { "LGORT": "171I", "WERKS": "1710" } ], "STL_3RD_PARTY_WMS_RET__PLT": [ { "LGORT": "171K", "WERKS": "1710" } ], "STL_DAY_TANK__PLT": [ { "LGORT": "171T", "WERKS": "1710" } ], "STL_EWM_INT_AFS__PLT": [ { "LGORT": "173S", "WERKS": "1710" } ], "STL_EWM_INT_ROD__PLT": [ { "LGORT": "173D", "WERKS": "1710" } ], "STL_KANBAN__PLT": [ { "LGORT": "171E", "WERKS": "1710" } ], "STL_MAIN_TANK__PLT": [ { "LGORT": "171Q", "WERKS": "1710" } ], "STL_RAW_MATNR__PLT": [ { "LGORT": "171C", "WERKS": "1710" } ], "STL_RET__PLT": [ { "LGORT": "171R", "WERKS": "1710" } ], "STL_STD_A__PLT": [ { "LGORT": "171A", "WERKS": "1710" }, { "LGORT": "171J", "WERKS": "1710" }, { "LGORT": "171F", "WERKS": "1710" }, { "LGORT": "171M", "WERKS": "1710" } ], "STL_STD_B__PLT": [ { "LGORT": "171B", "WERKS": "1710" } ], "STL_WAREHOUSE__PLT": [ { "LGORT": "175W", "WERKS": "1710" } ], "SOR__CCD_PRIMARY": [ { "VKORG": "1710", "BUKRS": "1710" } ], "DIV__SOR": [ { "SPART": "00", "VKORG": "1710" } ], "SOF__SLA": [ { "VKBUR": "170", "VKORG": "1710", "VTWEG": "10", "SPART": "00" } ], "SGR__SOF": [ { "VKGRP": "170", "VKBUR": "170" } ], "SLC__PLT": [ { "VKORG": "1710", "VTWEG": "10", "WERKS": "1710" } ], "SOR__SLA": [ { "VKORG": "1710", "VTWEG": "10", "SPART": "00" } ], "SPT_CUST_CONSMT__PLT": [ { "VSTEL": "171C", "WERKS": "1710" } ], "SPT_RAW_MATNR__PLT": [ { "VSTEL": "171R", "WERKS": "1710" } ], "SPT_STD__PLT": [ { "VSTEL": "1710", "WERKS": "1710" } ], "POR__PLT": [ { "EKORG": "1710", "WERKS": "1710" } ], "WHN_3RD_PARTY__STL_3RD_PARTY_WMS": [ { "LGNUM": "172", "WERKS": "1710", "LGORT": "171I" } ], "WHN_3RD_PARTY__STL_3RD_PARTY_WMS_RET": [ { "LGNUM": "172", "WERKS": "1710", "LGORT": "171K" } ], "WHN_3RD_PARTY__STL_STD_A": [ { "LGNUM": "172", "WERKS": "1710", "LGORT": "171J" } ], "WHN_CLOUD__STL_WAREHOUSE": [ { "LGNUM": "175", "WERKS": "1710", "LGORT": "175W" } ], "WHN_EXTENDED__STL_EWM_INT_AFS": [ { "LGNUM": "173", "WERKS": "1710", "LGORT": "173S" } ], "WHN_EXTENDED__STL_EWM_INT_ROD": [ { "LGNUM": "173", "WERKS": "1710", "LGORT": "173D" } ], "WHN_CLOUD__EWN": [ { "WHN_CLOUD_LGNUM": "175", "EWN_LGNUM": "1750" } ] } } } ] }; var deepClone = function(obj) { var out = null; if (Array.isArray(obj)) { out = []; for (var index = 0; index < obj.length; ++index) { var subArray = obj[index]; out.push((typeof subArray === 'object') ? deepClone(subArray) : subArray); } } else { out = {}; for (var key in obj) { var subObject = obj[key]; out[key] = (typeof subObject === 'object') ? deepClone(subObject) : subObject; } } return out; }; function cloneArray(value) { var newArray; if (value && value.length) { newArray = []; for (var i = 0; i < value.length; i++) { if (typeof value[i] === 'object') { newArray[i] = Array.isArray(value[i]) ? cloneArray(value[i]) : cloneObject(value[i]); } else { newArray[i] = value[i]; } } } else if (value === null) { newArray = null; } return newArray; } function cloneObject(value) { var newObject; if (value && typeof value === 'object' && Object.keys(value).length > 0) { newObject = {}; for (var key in value) { if (typeof value[key] === 'object') { newObject[key] = Array.isArray(value) ? cloneArray(value[key]) : cloneObject(value[key]); } else { newObject[key] = value[key]; } } } else if (value && typeof value === 'object' && Object.keys(value).length === 0) { newObject = {}; } else if (value === null) { newObject = null; } return newObject; } function reduceDeepClone(obj) { return Object.keys(obj).reduce((v, d) => Object.assign(v, { [d]: (obj[d].constructor === Object) ? reduceDeepClone(obj[d]) : obj[d] }), {}); } function deepCopy(inObject) { let outObject, value, key if (typeof inObject !== "object" || inObject === null) { return inObject // Return the value if inObject is not an object } // Create an array or object to hold the values outObject = Array.isArray(inObject) ? [] : {} for (key in inObject) { value = inObject[key] // Recursively (deep) copy for nested objects, including arrays outObject[key] = deepCopy(value) } return outObject }
Tests:
Lodash cloneDeep
testCopy = _.cloneDeep(obj);
JSON parse
testCopy = JSON.parse(JSON.stringify(obj));
For loop
testCopy = cloneObject(obj);
Recursive clone deep
testCopy = deepClone(obj);
Recursive reduce clone deep
testCopy = reduceDeepClone(obj);
Custom Deep Copy
testCopy = deepCopy(obj);