Assigning Object Properties to different object (v22)

Revision 22 of this benchmark created by J.Ducrot on


Description

Comparing various approaches to iterating over an object's enumerable properties and assigning them to a different object using vanilla JS, underscore and lodash.

Preparation HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
<script>var lodash = _.noConflict();</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script>var underscore = _.noConflict();</script>

Setup

var object = {};
    var foo = {};
    for (var i = 0; i < 333; ++i) {
      object['user'+i] = 'user'+i;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
lodash _.keys filtering
for (var i = 0, keys = lodash.keys(object); i < keys.length; i++) {
  foo[keys[i]] = object[keys[i]];
}
ready
underscore _.keys filtering
for (var i = 0, keys = underscore.keys(object); i < keys.length; i++) {
  foo[keys[i]] = object[keys[i]];
}
ready
vanilla keys filtering
for (var i = 0, keys = Object.keys(object), l = keys.length; i < l; ++i) {
  foo[keys[i]] = object[keys[i]];
}
ready
lodash.keys & .each
var keys = lodash.keys(object);
lodash.each(keys,function (key) {
  foo[key] = object[key];
});
ready
underscore.keys & .each
var keys = underscore.keys(object);
underscore.each(keys,function (key) {
  foo[key] = object[key];
});
ready
vanilla for…in
for (var property in object) {
  if (object.hasOwnProperty(property)) {
    foo[property] = object[property];
  }
}
ready
underscore while over keys
var keys = underscore.keys(object);
var k = keys.length;
while(--k){
  foo[keys[k]] = object[keys[k]];
}
ready
lodash while over keys
var keys = lodash.keys(object);
var k = keys.length;
while(--k){
  foo[keys[k]] = object[keys[k]];
}
ready
vanilla while over keys
var keys = Object.keys(object);
var k = keys.length;
while(--k){
  foo[keys[k]] = object[keys[k]];
}
ready

Revisions

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