function merge(anArray){
var i, len = anArray.length, hash = {}, result = [], obj;
// build a hash/object with key equal to code
for(i = 0; i < len; i++) {
obj = anArray[i];
if (hash[obj.code]) {
// if key already exists than push a new value to an array
// you can add extra check for duplicates here
hash[obj.code].a.push(obj.a);
} else {
// otherwise create a new object under the key
hash[obj.code] = {code: obj.code, a: [obj.a]}
}
}
// convert a hash to an array
for (i in hash) {
result.push(hash[i]);
}
return result;
}
--
// UNIT TEST
var input= [
{
code:"Abc",
a:10
},
{
code:"Abc",
a:11
},
{
code:"Abcd",
a:11
}
];
var expected = [
{code:"Abc",a:[10,11]},
{code:"Abcd",a:[11]},
];
console.log("Expected to get true: ", JSON.stringify(expected) == JSON.stringify(merge(input)));