Creating object array from key-value pairs - 2

JavaScript performance comparison

Test case created

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Original
var items = [
    { "Group" : "A", "Key" : "Name", "Value" : "John" },
    { "Group" : "A", "Key" : "Age",  "Value" : "30" },
    { "Group" : "A", "Key" : "City", "Value" : "London" },
    { "Group" : "B", "Key" : "Name", "Value" : "Hans" },
    { "Group" : "B", "Key" : "Age",  "Value" : "35" },
    { "Group" : "B", "Key" : "City", "Value" : "Berlin" },
    { "Group" : "C", "Key" : "Name", "Value" : "José" },
    { "Group" : "C", "Key" : "Age",  "Value" : "25" },
    { "Group" : "C", "Key" : "City", "Value" : "Madrid" }
], item, record, hash = {}, results = [];

// Create a "hash" object to build up
for (var i = 0, len = items.length; i < len; i += 1) {
    item = items[i];

  if (!hash[item.Group]) {
    hash[item.Group] = {
      Group : item.Group
    };
  }
  hash[item.Group][item.Key] = item.Value;
}

// Push each item in the hash to the array
for (record in hash) {
  if(hash.hasOwnProperty(record)) {
    results.push(hash[record]);
  }
}
 
pending…
Alternative 2
var values = [
  {'Group': 'A', 'Key': 'Name', 'Value': 'John'},
  {'Group': 'A', 'Key': 'Age', 'Value': '30'},
  {'Group': 'A', 'Key': 'City', 'Value': 'London'},
  {'Group': 'B', 'Key': 'Name', 'Value': 'Hans'},
  {'Group': 'B', 'Key': 'Age', 'Value': '35'},
  {'Group': 'B', 'Key': 'City', 'Value': 'Berlin'},
  {'Group': 'C', 'Key': 'Name', 'Value': 'José'},
  {'Group': 'C', 'Key': 'Age', 'Value': '25'},
  {'Group': 'C', 'Key': 'City', 'Value': 'Madrid'}
];

var map = {};
values.forEach(function(value) {
  var item = map[value.Group] = map[value.Group] || {Group: value.Group};
  item[value.Key] = value.Value;
});

var results = Object.keys(map).map(function(key) { return map[key]; });
 
pending…

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

Compare results of other browsers

0 comments

Add a comment