HTML Preparation code:
AخA
 
1
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js'></script>
2
<script src='https://cdn.jsdelivr.net/npm/jsondiffpatch@0.4.1/dist/jsondiffpatch.umd.min.js'></script>
3
<script src='https://cdn.jsdelivr.net/npm/rfdc@1.3.0'></script>
Script Preparation code:
x
 
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...'
  }
};
var myCopy = null;
var rfdcClone = rfdc();
///////////////////////////////////////////////////////////////////
function recursiveDeepCopy(value) {
  if (value instanceof Date) {
    return new Date(value);
  }
  if (value instanceof RegExp) {
    return new RegExp(value);
  }
  if (value instanceof Map) {
    return new Map(value);
  }
  if (value instanceof Set) {
    return new Set(value);
  }
  if (typeof value !== 'object') {
    return value;
  }
  if (!value) {
    return value;
  }
  let newObject;
  if ('[object Array]' === Object.prototype.toString.apply(value)) {
    newObject = [];
    for (let i = 0; i < value.length; i += 1) {
      newObject[i] = recursiveDeepCopy(value[i]);
    }
    return newObject;
  }
  newObject = {};
  for (let i in value) {
    if (value.hasOwnProperty(i)) {
      newObject[i] = recursiveDeepCopy(value[i]);
    }
  }
  return newObject;
}
Tests:
  • lodash cloneDeep

     
    myCopy = _.cloneDeep(MyObject);
  • JSON.parse(JSON.stringify())

     
    myCopy = JSON.parse(JSON.stringify(MyObject));
  • recursiveDeepCopy

     
    myCopy = recursiveDeepCopy(MyObject);
  • structuredClone

     
    myCopy = structuredClone(MyObject);
  • rfdc

     
    myCopy = rfdcClone(MyObject);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    lodash cloneDeep
    JSON.parse(JSON.stringify())
    recursiveDeepCopy
    structuredClone
    rfdc

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 5 days ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Chrome 134 on Mac OS X 10.15.7
View result in a separate tab
Test name Executions per second
lodash cloneDeep 1845975.6 Ops/sec
JSON.parse(JSON.stringify()) 1586476.0 Ops/sec
recursiveDeepCopy 5341361.0 Ops/sec
structuredClone 747519.0 Ops/sec
rfdc 6468581.5 Ops/sec