Split array of objects into new array or objects based on age value

arrays, javascript

Solution

I'm assuming you want to group the items by their age. Here is one way:

(fiddle)

items.reduce(function(buckets,item){
    if(!buckets[item.age]) buckets[item.age] = [];
    buckets[item.age].push(item);
    return buckets;
},{});

Let's explain:

- For each item, if we don't already have a 'bucket' for it, create a new empty one

- Add it to the bucket

- return the new updated bucket list.

The method returns an object with 3 properties: 16,18 and 20, each containing the objects with that age.

Problem

Split array of objects into new array or objects based on age value in Javascript ``` var items = [ {name:"Foo", age:16, color:"w"}, {name:"Bar", age:18, color:"b"}, {name:"foo", age:16, color:"w"}, {name:"bar", age:18, color:"w"}, {name:"foobar", age:18, color:"b"}, {name:"barfoo", age:20, color:"w"} ]; ``` How can I return a list like: ``` var items = [ {age:16,name:"Foo"|"foo",gender:"w"|"w"}, {age:18,name:"Bar"|"bar"|"foobar",gender:"b"|"w"|"b"}, {age:20,name:"barfoo",gender:"w"} ]; ``` I have worked but i got output with 'undefined' in name. Below is my code. ``` var data = [{age: 21,name: "Walter",color: "black"},{age: 25,name: "sentinel",color: "black" },{age: 21,name: "Micah",color: "purple"},{age: 25,name: "mike",color: "black"},{age: 21,name: "Danny",color: "white"},{age: 25,name: "mike",color: "black"}]; var obj=data; var arrayobj = obj.length; var i, row, arr = obj, ss = {}; for (i = 0; i < arr.length; i++) { row = arr[i]; ss[row.age] = ss[row.age] || {count: 0}; if (ss[row.age][row.age] === undefined) { ss[row.age][row.name] = row.name; ss[row.age]['name']+=row.name+'|'; ss[row.age]['color']+=row.color+'|'; ss[row.age]['count'] += 1; } } console.table(ss); ```

Original source