cloning an object

JavaScript performance comparison

Revision 73 of this test case created by Anon

Preparation code

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
      
<script>
Benchmark.prototype.setup = function() {
  var oldObject = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: function() {

      'use strict';
      return 6;
    },
    g: [7, 8, 9]
  },
  
    oldArray = [
      1, 2, 3, 4, 5,
      function() {

        'use strict';
        return 6;
      },
      [7, 8, 9]
    ];
  
  clone = function(source) {

    'use strict';
    var copy, i;
    if (Object.prototype.toString.call(source) === '[object Array]') {
      copy = [];
      for (i = 0; i < source.length; i++) {
        copy[i] = clone(source[i]);
      }
      return copy;
    } else if (typeof(source) === 'object') {
      copy = {};
      for (var prop in source) {
        if (source.hasOwnProperty(prop)) {
          copy[prop] = clone(source[prop]);
        }
      }
      return copy;
    } else {
      return source;
    }
  };

};
</script>

Preparation code output

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
clone(obj)
var newObject = clone(oldObject);
pending…
$.extend(obj) deep
var newObject = jQuery.extend(true, {}, oldObject);
pending…
loDash(obj) deep
var newObject = _.clone(oldObject, true);
pending…
Object.assign
var newObject = Object.assign({}, oldObject);
pending…

Compare results of other browsers

Revisions

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

0 Comments