Run details:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
Chrome 83
Windows
Desktop
4 years ago
Test name Executions per second
Lodash cloneDeep 368755.3 Ops/sec
Json clone 210961.0 Ops/sec
Bitfish Simple Clone 526333.8 Ops/sec
HTML Preparation code:
x
 
1
2
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
Script Preparation code:
 
function forEach(array, iteratee) {
    let index = -1;
    const length = array.length;
    while (++index < length) {
        iteratee(array[index], index);
    }
    return array;
}
function clone(target, map = new WeakMap()) {
    if (typeof target === 'object') {
        const isArray = Array.isArray(target);
        let cloneTarget = isArray ? [] : {};
        if (map.get(target)) {
            return map.get(target);
        }
        map.set(target, cloneTarget);
        if (isArray) {
          forEach(target, (value, index) => {
            cloneTarget[index] = value;
          })
        } else {
          forEach(Object.keys(target), (key, index) => {
            cloneTarget[key] = target[key];
          })
        }
        return cloneTarget;
    } else {
        return target;
    }
}
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;
Tests:
  • Lodash cloneDeep

     
    myCopy = _.cloneDeep(MyObject);
  • Json clone

     
    myCopy = JSON.parse(JSON.stringify(MyObject));
  • Bitfish Simple Clone

     
    myCopy = clone(MyObject)