Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
javascript deep clone benchmark
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Browser:
Firefox 115
Operating system:
Linux
Device Platform:
Desktop
Date tested:
2 years ago
Test name
Executions per second
Lodash CloneDeep
6754.3 Ops/sec
Json Clone
20223.2 Ops/sec
recursiveDeepCopy
60294.6 Ops/sec
clone
38091.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 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...' }, regularMarkets: { 1: { markets: [ {id: "", sortOrder: 10100, label: "Match Result --- 2"}, {id: "", sortOrder: 10100, label: "Match Result"} ] }, 2: { markets: [ {id: "", sortOrder: 20200, label: "Both Teams to Score --- 2"}, {id: "", sortOrder: 20200, label: "Both Teams to Score"} ] }, 3: { markets: [ {id: "", sortOrder: 30300, label: "Draw no Bet --- 2"}, {id: "", sortOrder: 30300, label: "Draw no Bet"} ] }, 4: { markets: [ {id: "", sortOrder: 40400, label: "Double Chance --- 2"}, {id: "", sortOrder: 40400, label: "Double Chance"} ] }, 5: { markets: [ {id: "", sortOrder: 50500, label: "3-way Handicap --- 2"}, {id: "", sortOrder: 50500, label: "3-way Handicap"} ] }, 6: { marketGroupId: "01" }, 15: { markets: [ {id: "", sortOrder: 151501.5, label: "Match Goals | 1.5"}, {id: "", sortOrder: 151502.5, label: "Match Goals | 2.5"}, {id: "", sortOrder: 151503.5, label: "Match Goals | 3.5"} ] }, 20: { marketGroupId: "05" }, 60: { markets: [ {id: "", sortOrder: 606000, label: "Odd/Even number of Goals"} ] } }, groupedMarkets: { 05: { grouping: { 10: { grouping: { N5MTCO: { grouping: {}, markets: [ {id: "", sortOrder: 210101.5, label: "Next 5 mins (10:00 - 14:59) | Total Corners | 1.5"}, {id: "", sortOrder: 210202.5, label: "Next 5 mins (10:00 - 14:59) | Total Corners | 2.5"}, {id: "", sortOrder: 210303.5, label: "Next 5 mins (10:00 - 14:59) | Total Corners | 3.5"} ] }, N5MTTI: { grouping: {}, markets: [ {id: "", sortOrder: 200101.5, label: "Next 5 mins (10:00 - 14:59) | Total Throw Ins | 1.5"}, {id: "", sortOrder: 200202.5, label: "Next 5 mins (10:00 - 14:59) | Total Throw Ins | 2.5"}, {id: "", sortOrder: 200303.5, label: "Next 5 mins (10:00 - 14:59) | Total Throw Ins | 3.5"} ] }, N5MTC: { grouping: {}, markets: [ {id: "", sortOrder: 220202.5, label: "Next 5 mins (10:00 - 14:59) | Total Cards | 2.5"}, {id: "", sortOrder: 220303.5, label: "Next 5 mins (10:00 - 14:59) | Total Cards | 3.5"}, {id: "", sortOrder: 220404.5, label: "Next 5 mins (10:00 - 14:59) | Total Cards | 4.5"} ] } }, marketGroupSortOrder: [ {group: "N5MTTI", sort: 20}, {group: "N5MTCO", sort: 21}, {group: "N5MTC", sort: 22} ] }, 05: { grouping: { N5MTCO: { grouping: {}, markets: [ {id: "", sortOrder: 210101.5, label: "Next 5 mins (05:00 - 09:59) | Total Corners | 1.5"}, {id: "", sortOrder: 210202.5, label: "Next 5 mins (05:00 - 09:59) | Total Corners | 2.5"}, {id: "", sortOrder: 210303.5, label: "Next 5 mins (05:00 - 09:59) | Total Corners | 3.5"} ] }, N5MTTI: { grouping: {}, markets: [ {id: "", sortOrder: 200101.5, label: "Next 5 mins (05:00 - 09:59) | Total Throw Ins | 1.5"}, {id: "", sortOrder: 200202.5, label: "Next 5 mins (05:00 - 09:59) | Total Throw Ins | 2.5"}, {id: "", sortOrder: 200303.5, label: "Next 5 mins (05:00 - 09:59) | Total Throw Ins | 3.5"} ] }, N5MTC: { grouping: {}, markets: [ {id: "", sortOrder: 220202.5, label: "Next 5 mins (05:00 - 09:59) | Total Cards | 2.5"}, {id: "", sortOrder: 220303.5, label: "Next 5 mins (05:00 - 09:59) | Total Cards | 3.5"}, {id: "", sortOrder: 220404.5, label: "Next 5 mins (05:00 - 09:59) | Total Cards | 4.5"} ] } }, marketGroupSortOrder: [ {group: "N5MTTI", sort: 20}, {group: "N5MTCO", sort: 21}, {group: "N5MTC", sort: 22} ] } }, sortOrder: 20, marketGroupSortOrder: [ {group: "05", sort: 5}, {group: "10", sort: 10} ] }, 01: { grouping: { 10: { grouping: { N1MTIA: { grouping: {}, markets: [ {id: "", sortOrder: 80800, label: "Next 1 min (10:00 - 10:59) | Throw In Awarded"} ] }, N1MGKA: { grouping: {}, markets: [ {id: "", sortOrder: 60600, label: "Next 1 min (10:00 - 10:59) | Goal Kick Awarded"} ] }, N1MFKA: { grouping: {}, markets: [ {id: "", sortOrder: 70700, label: "Next 1 min (10:00 - 10:59) | Free Kick Awarded"} ] } }, marketGroupSortOrder: [ {group: "N1MGKA", sort: 6}, {group: "N1MFKA", sort: 7}, {group: "N1MTIA", sort: 8} ] }, 11: { grouping: { N1MGKA: { grouping: {}, markets: [ {id: "", sortOrder: 60600, label: "Next 1 min (11:00 - 10:59) | Goal Kick Awarded"} ] }, N1MTIA: { grouping: {}, markets: [ {id: "", sortOrder: 80800, label: "Next 1 min (11:00 - 10:59) | Throw In Awarded"} ] }, N1MFKA: { grouping: {}, markets: [ {id: "", sortOrder: 70700, label: "Next 1 min (11:00 - 10:59) | Free Kick Awarded"} ] }, }, marketGroupSortOrder: [ {group: "N1MGKA", sort: 6}, {group: "N1MFKA", sort: 7}, {group: "N1MTIA", sort: 8} ] }, 08: { grouping: { N1MFKA: { grouping: {}, markets: [ {id: "", sortOrder: 70700, label: "Next 1 min (08:00 - 08:59) | Free Kick Awarded"} ] }, N1MTIA: { grouping: {}, markets: [ {id: "", sortOrder: 80800, label: "Next 1 min (08:00 - 08:59) | Throw In Awarded"} ] }, N1MGKA: { grouping: {}, markets: [ {id: "", sortOrder: 60600, label: "Next 1 min (08:00 - 08:59) | Goal Kick Awarded"} ] } }, marketGroupSortOrder: [ {group: "N1MGKA", sort: 6}, {group: "N1MFKA", sort: 7}, {group: "N1MTIA", sort: 8} ] }, 09: { grouping: { N1MTIA: { grouping: {}, markets: [ {id: "", sortOrder: 80800, label: "Next 1 min (09:00 - 09:59) | Throw In Awarded"} ] }, N1MGKA: { grouping: {}, markets: [ {id: "", sortOrder: 60600, label: "Next 1 min (09:00 - 09:59) | Goal Kick Awarded"} ] }, N1MFKA: { grouping: {}, markets: [ {id: "", sortOrder: 70700, label: "Next 1 min (09:00 - 09:59) | Free Kick Awarded"} ] } }, marketGroupSortOrder: [ {group: "N1MGKA", sort: 6}, {group: "N1MFKA", sort: 7}, {group: "N1MTIA", sort: 8} ] } }, sortOrder: 6, marketGroupSortOrder: [ {group: "08", sort: 8}, {group: "09", sort: 9}, {group: "10", sort: 10}, {group: "11", sort: 11} ] } } } var myCopy = null; function clone(obj) { if(obj === null || typeof obj !== 'object') return obj; var target = obj instanceof Array ? [] : {}; for (var i in obj) { target[i] = clone(obj[i]); } return target; } function recursiveDeepCopy(o) { var newO, i; if (typeof o !== 'object') { return o; } if (!o) { return o; } if ('[object Array]' === Object.prototype.toString.apply(o)) { newO = []; for (i = 0; i < o.length; i += 1) { newO[i] = recursiveDeepCopy(o[i]); } return newO; } newO = {}; for (i in o) { if (o.hasOwnProperty(i)) { newO[i] = recursiveDeepCopy(o[i]); } } return newO; }
Tests:
Lodash CloneDeep
myCopy = _.cloneDeep(MyObject);
Json Clone
myCopy = JSON.parse(JSON.stringify(MyObject));
recursiveDeepCopy
myCopy = recursiveDeepCopy(MyObject);
clone
myCopy = clone(MyObject);