javascript | Object grouping

grouping, javascript, merge, object

Solution

Try with something like this:

function groupBy(collection, property) {
    var i = 0, val, index,
        values = [], result = [];
    for (; i < collection.length; i++) {
        val = collection[i][property];
        index = values.indexOf(val);
        if (index > -1)
            result[index].push(collection[i]);
        else {
            values.push(val);
            result.push([collection[i]]);
        }
    }
    return result;
}

var obj = groupBy(list, "group");

Keep in mind that `Array.prototype.indexOf` isn't defined in IE8 and older, but there are common polyfills for that.

Problem

I have an object. It looks like below: ``` [ { "name":"Display", "group":"Technical detals", "id":"60", "value":"4" }, { "name":"Manufacturer", "group":"Manufacturer", "id":"58", "value":"Apple" }, { "name":"OS", "group":"Technical detals", "id":"37", "value":"Apple iOS" } ] ``` I would like to group this data by group field and get this object: ``` var obj = { 0 = [ { 'group' = 'Technical detals', 'name' = 'Display', 'id' = '60', 'value' = '4' }, { 'group' = 'Technical detals', 'name' = 'OS', 'id' = '37', 'value' = 'Apple iOS' }], 1 = [ { 'group' = 'Manufacturer', 'name' = 'Manufacturer', 'id' = '58', 'value' = 'Apple' }] } ``` How can I group my first object?

Original source