Cloning an Object (v121)

Revision 121 of this benchmark created on


Description

There is no quick and easy facility for cloning an object, Some people recommend using JQuery.extend others JSON.parse/stringify

http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object

If you want the fastest possible clone function. I would personally anticipate the data structure of your object and write a custom clone to handle it.

Preparation HTML

<script src="http://code.jquery.com/jquery-1.5.1.js" type="text/javascript"></script>


<script>
  var oldObject = [{"LLB":[null,null,null,null,null,null,null,null,null,null,null,{"T":117226,"Sel":0,"Chs":[{"T":12026,"O":"2,70","I":29892901,"P":101,"H":null},{"T":12027,"O":"1,25","I":29892904,"P":301,"H":null}],"S":2,"I":8523502,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_43","To":false,"IA":false},null,null,null,null,null,null,null],"MT":729735,"LID":87288,"ISP":false,"LMR":0,"LMTR":0}][{"LLB":[null,{"T":214134,"Sel":0,"Chs":[{"T":805778,"O":"1,08","I":29893129,"P":301,"H":null},{"T":805779,"O":"3,80","I":29893132,"P":101,"H":null},{"T":131690,"O":"1,70","I":29893135,"P":302,"H":null},{"T":131935,"O":"1,70","I":29893138,"P":102,"H":null},{"T":131691,"O":"3,20","I":29893141,"P":303,"H":null},{"T":131936,"O":"1,16","I":29893144,"P":103,"H":null},{"T":131692,"O":"6,00","I":29893147,"P":304,"H":null},{"T":131937,"O":"-","I":29893150,"P":104,"H":null}],"S":2,"I":8523520,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Tpt","To":false,"IA":false},{"T":827115,"Sel":0,"Chs":[{"T":825672,"O":"4,00","I":29893081,"P":102,"H":null},{"T":825673,"O":"1,07","I":29893084,"P":302,"H":null}],"S":2,"I":8523529,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_35","To":false,"IA":false},{"T":16320,"Sel":0,"Chs":[{"T":825725,"O":"1,68","I":29892907,"P":101,"H":null},{"T":825745,"O":"2,60","I":29892910,"P":301,"H":null},{"T":825735,"O":"4,00","I":29892913,"P":201,"H":null}],"S":2,"I":8523499,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Nsr","To":false,"IA":false},null,{"T":827064,"Sel":0,"Chs":[{"T":805778,"O":"1,55","I":29892544,"P":301,"H":null},{"T":805779,"O":"1,90","I":29892546,"P":101,"H":null},{"T":131690,"O":"3,50","I":29892589,"P":302,"H":null},{"T":131935,"O":"1,12","I":29892592,"P":102,"H":null},{"T":131691,"O":"6,00","I":29892595,"P":303,"H":null},{"T":131936,"O":"-","I":29892598,"P":103,"H":null}],"S":2,"I":8523478,"M":1,"P":"0:0:0","CgCd":"1st Half","BTCo":"Lv_Ftb_60","To":false,"IA":false},null,{"T":852898,"Sel":0,"Chs":[{"T":792564,"O":"9,00","I":29892628,"P":104,"H":null},{"T":792604,"O":"5,25","I":29892631,"P":204,"H":null},{"T":792574,"O":"1,06","I":29892634,"P":304,"H":null},{"T":792562,"O":"4,00","I":29892637,"P":105,"H":null},{"T":792602,"O":"2,90","I":29892640,"P":205,"H":null},{"T":792572,"O":"1,50","I":29892643,"P":305,"H":null},{"T":792552,"O":"1,10","I":29892646,"P":106,"H":null},{"T":792592,"O":"4,30","I":29892649,"P":206,"H":null},{"T":792582,"O":"8,50","I":29892652,"P":306,"H":null}],"S":2,"I":8523490,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Han","To":false,"IA":false},null,null,null,{"T":117226,"Sel":0,"Chs":[{"T":12026,"O":"2,70","I":29892901,"P":101,"H":null},{"T":12027,"O":"1,25","I":29892904,"P":301,"H":null}],"S":2,"I":8523502,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_43","To":false,"IA":false},null,null,null,null,null,null,null],"MT":729735,"LID":87288,"ISP":false,"LMR":0,"LMTR":0}][{"LLB":[{"T":16322,"Sel":0,"Chs":[{"T":10,"O":"1,38","I":29892570,"P":101,"H":null},{"T":11,"O":"9,00","I":29892573,"P":201,"H":null},{"T":12,"O":"12,00","I":29892576,"P":301,"H":null}],"S":2,"I":8523487,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Rtr","To":false,"IA":false},{"T":214134,"Sel":0,"Chs":[{"T":805778,"O":"1,08","I":29893129,"P":301,"H":null},{"T":805779,"O":"3,80","I":29893132,"P":101,"H":null},{"T":131690,"O":"1,70","I":29893135,"P":302,"H":null},{"T":131935,"O":"1,70","I":29893138,"P":102,"H":null},{"T":131691,"O":"3,20","I":29893141,"P":303,"H":null},{"T":131936,"O":"1,16","I":29893144,"P":103,"H":null},{"T":131692,"O":"6,00","I":29893147,"P":304,"H":null},{"T":131937,"O":"-","I":29893150,"P":104,"H":null}],"S":2,"I":8523520,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Tpt","To":false,"IA":false},{"T":827115,"Sel":0,"Chs":[{"T":825672,"O":"4,00","I":29893081,"P":102,"H":null},{"T":825673,"O":"1,07","I":29893084,"P":302,"H":null}],"S":2,"I":8523529,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_35","To":false,"IA":false},{"T":16320,"Sel":0,"Chs":[{"T":825725,"O":"1,68","I":29892907,"P":101,"H":null},{"T":825745,"O":"2,60","I":29892910,"P":301,"H":null},{"T":825735,"O":"4,00","I":29892913,"P":201,"H":null}],"S":2,"I":8523499,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Nsr","To":false,"IA":false},{"T":16319,"Sel":0,"Chs":[{"T":10,"O":"2,55","I":29893066,"P":101,"H":null},{"T":12,"O":"4,00","I":29893069,"P":301,"H":null},{"T":11,"O":"1,62","I":29893072,"P":201,"H":null}],"S":2,"I":8523514,"M":1,"P":"0:0:0","CgCd":"1st Half","BTCo":"Lv_Ftb_Htr","To":false,"IA":false},{"T":827064,"Sel":0,"Chs":[{"T":805778,"O":"1,55","I":29892544,"P":301,"H":null},{"T":805779,"O":"1,90","I":29892546,"P":101,"H":null},{"T":131690,"O":"3,50","I":29892589,"P":302,"H":null},{"T":131935,"O":"1,12","I":29892592,"P":102,"H":null},{"T":131691,"O":"6,00","I":29892595,"P":303,"H":null},{"T":131936,"O":"-","I":29892598,"P":103,"H":null}],"S":2,"I":8523478,"M":1,"P":"0:0:0","CgCd":"1st Half","BTCo":"Lv_Ftb_60","To":false,"IA":false},{"T":25063,"Sel":0,"Chs":[{"T":25,"O":"3,50","I":29892874,"P":101,"H":null},{"T":26,"O":"12,00","I":29892877,"P":102,"H":null},{"T":22,"O":"28,00","I":29892880,"P":103,"H":null},{"T":35,"O":"1,80","I":29892883,"P":201,"H":null},{"T":16,"O":"10,00","I":29892886,"P":202,"H":null},{"T":24,"O":"50,00","I":29892889,"P":203,"H":null},{"T":40,"O":"5,50","I":29892892,"P":301,"H":null},{"T":41,"O":"25,00","I":29892895,"P":302,"H":null},{"T":18,"O":"35,00","I":29892898,"P":303,"H":null},{"T":28,"O":"35,00","I":29893036,"P":104,"H":null},{"T":29,"O":"50,00","I":29893039,"P":105,"H":null},{"T":30,"O":"60,00","I":29893042,"P":106,"H":null},{"T":31,"O":"60,00","I":29893045,"P":107,"H":null},{"T":32,"O":"60,00","I":29893048,"P":108,"H":null},{"T":43,"O":"50,00","I":29893051,"P":304,"H":null},{"T":44,"O":"60,00","I":29893054,"P":305,"H":null},{"T":45,"O":"60,00","I":29893057,"P":306,"H":null},{"T":46,"O":"60,00","I":29893060,"P":307,"H":null},{"T":47,"O":"60,00","I":29893063,"P":308,"H":null}],"S":2,"I":8523508,"M":1,"P":"0:0:0","CgCd":"Score","BTCo":"Lv_Ftb_22","To":false,"IA":false},{"T":852898,"Sel":0,"Chs":[{"T":792564,"O":"9,00","I":29892628,"P":104,"H":null},{"T":792604,"O":"5,25","I":29892631,"P":204,"H":null},{"T":792574,"O":"1,06","I":29892634,"P":304,"H":null},{"T":792562,"O":"4,00","I":29892637,"P":105,"H":null},{"T":792602,"O":"2,90","I":29892640,"P":205,"H":null},{"T":792572,"O":"1,50","I":29892643,"P":305,"H":null},{"T":792552,"O":"1,10","I":29892646,"P":106,"H":null},{"T":792592,"O":"4,30","I":29892649,"P":206,"H":null},{"T":792582,"O":"8,50","I":29892652,"P":306,"H":null}],"S":2,"I":8523490,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_Han","To":false,"IA":false},{"T":107,"Sel":0,"Chs":[{"T":13,"O":"1,20","I":29892865,"P":101,"H":null},{"T":14,"O":"1,25","I":29892868,"P":201,"H":null},{"T":15,"O":"5,25","I":29892871,"P":301,"H":null}],"S":2,"I":8523505,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_6","To":false,"IA":false},{"T":827099,"Sel":0,"Chs":[{"T":10,"O":"-","I":29893030,"P":101,"H":null},{"T":12,"O":"6,00","I":29893033,"P":301,"H":null}],"S":2,"I":8523511,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_5","To":false,"IA":false},{"T":102,"Sel":0,"Chs":[{"T":25,"O":"3,90","I":29892691,"P":101,"H":null},{"T":26,"O":"7,50","I":29892694,"P":102,"H":null},{"T":22,"O":"11,00","I":29892697,"P":103,"H":null},{"T":28,"O":"20,00","I":29892700,"P":104,"H":null},{"T":29,"O":"28,00","I":29892703,"P":105,"H":null},{"T":30,"O":"60,00","I":29892706,"P":106,"H":null},{"T":35,"O":"4,25","I":29892708,"P":202,"H":null},{"T":16,"O":"6,00","I":29892711,"P":203,"H":null},{"T":24,"O":"30,00","I":29892714,"P":204,"H":null},{"T":38,"O":"100,00","I":29892717,"P":205,"H":null},{"T":40,"O":"6,50","I":29892720,"P":301,"H":null},{"T":41,"O":"18,00","I":29892723,"P":302,"H":null},{"T":18,"O":"17,00","I":29892726,"P":303,"H":null},{"T":43,"O":"60,00","I":29892729,"P":304,"H":null},{"T":44,"O":"60,00","I":29892732,"P":305,"H":null},{"T":31,"O":"50,00","I":29892742,"P":107,"H":null},{"T":32,"O":"75,00","I":29892745,"P":108,"H":null},{"T":33,"O":"100,00","I":29892748,"P":109,"H":null},{"T":34,"O":"125,00","I":29892751,"P":110,"H":null},{"T":4501,"O":"100,00","I":29892754,"P":111,"H":null},{"T":4502,"O":"125,00","I":29892757,"P":112,"H":null},{"T":4503,"O":"125,00","I":29892760,"P":113,"H":null},{"T":11291,"O":"150,00","I":29892763,"P":114,"H":null},{"T":576725,"O":"150,00","I":29892766,"P":115,"H":null},{"T":4504,"O":"125,00","I":29892769,"P":116,"H":null},{"T":4505,"O":"125,00","I":29892772,"P":117,"H":null},{"T":4506,"O":"150,00","I":29892775,"P":118,"H":null},{"T":576726,"O":"150,00","I":29892778,"P":119,"H":null},{"T":11292,"O":"150,00","I":29892781,"P":120,"H":null},{"T":11293,"O":"150,00","I":29892784,"P":121,"H":null},{"T":11294,"O":"150,00","I":29892787,"P":122,"H":null},{"T":11295,"O":"150,00","I":29892790,"P":123,"H":null},{"T":11296,"O":"150,00","I":29892793,"P":124,"H":null},{"T":11297,"O":"150,00","I":29892796,"P":125,"H":null},{"T":39,"O":"150,00","I":29892799,"P":206,"H":null},{"T":576735,"O":"150,00","I":29892802,"P":207,"H":null},{"T":45,"O":"75,00","I":29892805,"P":306,"H":null},{"T":46,"O":"125,00","I":29892808,"P":307,"H":null},{"T":47,"O":"125,00","I":29892811,"P":308,"H":null},{"T":48,"O":"125,00","I":29892814,"P":309,"H":null},{"T":49,"O":"125,00","I":29892817,"P":310,"H":null},{"T":4507,"O":"150,00","I":29892820,"P":311,"H":null},{"T":4508,"O":"150,00","I":29892823,"P":312,"H":null},{"T":4509,"O":"150,00","I":29892826,"P":313,"H":null},{"T":11299,"O":"150,00","I":29892829,"P":314,"H":null},{"T":576736,"O":"150,00","I":29892832,"P":315,"H":null},{"T":4510,"O":"150,00","I":29892835,"P":316,"H":null},{"T":4511,"O":"150,00","I":29892838,"P":317,"H":null},{"T":4512,"O":"150,00","I":29892841,"P":318,"H":null},{"T":576738,"O":"150,00","I":29892844,"P":319,"H":null},{"T":11300,"O":"150,00","I":29892847,"P":320,"H":null},{"T":11304,"O":"150,00","I":29892850,"P":321,"H":null},{"T":11301,"O":"150,00","I":29892853,"P":322,"H":null},{"T":11305,"O":"150,00","I":29892856,"P":323,"H":null},{"T":11302,"O":"150,00","I":29892859,"P":324,"H":null},{"T":11303,"O":"150,00","I":29892862,"P":325,"H":null}],"S":2,"I":8523496,"M":1,"P":"0:0:0","CgCd":"Score","BTCo":"Lv_Ftb_17","To":false,"IA":false},{"T":117226,"Sel":0,"Chs":[{"T":12026,"O":"2,70","I":29892901,"P":101,"H":null},{"T":12027,"O":"1,25","I":29892904,"P":301,"H":null}],"S":2,"I":8523502,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_43","To":false,"IA":false},null,{"T":692952,"Sel":0,"Chs":[{"T":35385,"O":"2,05","I":29893024,"P":101,"H":null},{"T":35386,"O":"1,45","I":29893027,"P":301,"H":null}],"S":2,"I":8523517,"M":1,"P":"0:0:0","CgCd":"1st Half","BTCo":"Lv_Ftb_92","To":false,"IA":false},{"T":103,"Sel":0,"Chs":[{"T":4852,"O":"3,00","I":29892997,"P":101,"H":null},{"T":17,"O":"15,00","I":29893000,"P":201,"H":null},{"T":4854,"O":"30,00","I":29893003,"P":301,"H":null},{"T":19,"O":"4,75","I":29893006,"P":102,"H":null},{"T":20,"O":"3,20","I":29893009,"P":202,"H":null},{"T":21,"O":"7,50","I":29893012,"P":302,"H":null},{"T":4853,"O":"28,00","I":29893015,"P":103,"H":null},{"T":23,"O":"15,00","I":29893018,"P":203,"H":null},{"T":4855,"O":"6,00","I":29893021,"P":303,"H":null}],"S":2,"I":8523523,"M":1,"P":"0:0:0","CgCd":"Match","BTCo":"Lv_Ftb_19","To":false,"IA":false},{"T":598572,"Sel":0,"Chs":[{"T":714494,"O":"2,50","I":29892549,"P":101,"H":null},{"T":714495,"O":"2,30","I":29892552,"P":301,"H":null},{"T":11,"O":"2,35","I":29892555,"P":201,"H":null}],"S":2,"I":8523484,"M":1,"P":"0:0:0","CgCd":"Goals","BTCo":"Lv_Ftb_53","To":false,"IA":false},{"T":827070,"Sel":0,"Chs":[{"T":25,"O":"3,50","I":29892487,"P":101,"H":null},{"T":35,"O":"1,90","I":29892490,"P":201,"H":null},{"T":26,"O":"11,00","I":29892493,"P":102,"H":null},{"T":16,"O":"9,00","I":29892496,"P":202,"H":null},{"T":40,"O":"5,50","I":29892498,"P":301,"H":null},{"T":22,"O":"25,00","I":29892501,"P":103,"H":null},{"T":28,"O":"35,00","I":29892504,"P":104,"H":null},{"T":24,"O":"50,00","I":29892508,"P":203,"H":null},{"T":41,"O":"22,00","I":29892511,"P":302,"H":null},{"T":18,"O":"35,00","I":29892514,"P":303,"H":null},{"T":29,"O":"50,00","I":29892517,"P":105,"H":null},{"T":30,"O":"60,00","I":29892520,"P":106,"H":null},{"T":31,"O":"60,00","I":29892523,"P":107,"H":null},{"T":32,"O":"60,00","I":29892526,"P":108,"H":null},{"T":43,"O":"50,00","I":29892529,"P":304,"H":null},{"T":44,"O":"60,00","I":29892532,"P":305,"H":null},{"T":45,"O":"60,00","I":29892535,"P":306,"H":null},{"T":46,"O":"60,00","I":29892538,"P":307,"H":null},{"T":47,"O":"60,00","I":29892541,"P":308,"H":null}],"S":2,"I":8523475,"M":1,"P":"0:0:0","CgCd":"Score","BTCo":"Lv_Ftb_39","To":false,"IA":false},{"T":692966,"Sel":0,"Chs":[{"T":35385,"O":"1,95","I":29893183,"P":101,"H":null},{"T":35386,"O":"1,50","I":29893186,"P":301,"H":null}],"S":2,"I":8523526,"M":1,"P":"0:0:0","CgCd":"2nd Half","BTCo":"Lv_Ftb_93","To":false,"IA":false},null],"MT":729735,"LID":87288,"ISP":false,"LMR":0,"LMTR":0}];
  
  
  function clone(obj) {
   var target = {};
   for (var i in obj) {
    if (obj.hasOwnProperty(i)) {
     target[i] = obj[i];
    }
   }
   return target;
  }
  
  Object.defineProperties(Object, {
   'extend': {
    'configurable': true,
    'enumerable': false,
    'value': function extend(what, wit) {
     var extObj, witKeys = Object.keys(wit);
  
     extObj = Object.keys(what).length ? Object.clone(what) : {};
  
     witKeys.forEach(function(key) {
      Object.defineProperty(extObj, key, Object.getOwnPropertyDescriptor(wit, key));
     });
  
     return extObj;
    },
    'writable': true
   },
   'clone': {
    'configurable': true,
    'enumerable': false,
    'value': function clone(obj) {
     return Object.extend({}, obj);
    },
    'writable': true
   }
  });
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
JQuery.extend deep
var newObject = jQuery.extend(true, {}, oldObject);
ready
JSON
var newObject = JSON.parse(JSON.stringify(oldObject));
ready
JQuery.extend
var newObject = jQuery.extend({}, oldObject);
ready
simple clone function
var newObject = clone(oldObject);
ready
ES5 Object.clone
var newObject = Object.clone(oldObject);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.