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); ```