Creating object array from key-value pairs - 1

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 group, results = [];
for (var i = 0; i < values.length; ) {
  results.push({Group: group = values[i].Group});
  do {
    results[results.length - 1][values[i].Key] = values[i].Value;  
  } while (++i < values.length && values[i].Group == group);
}
 
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