I have an array of objects:
[{person:101, year: 2012}, {person:102, year: 2012}, {person:103, year: 2013}]
And I want to be able to return an
As others have mentioned, an object would be a better fit for aggregating the data. You could use a normal loop, or reduce to do it:
var data = [{person:101, year: 2012}, {person:102, year: 2012}, {person:103,
year: 2013}];
var yearCounts = data.reduce(function (result, person) {
var currentCount = result[person.year] || 0;
result[person.year] = currentCount + 1;
return result;
}, {});
console.log(yearCounts);
If you really need it as an array, you could the loop over the object and convert it to an array:
var data = [{person:101, year: 2012}, {person:102, year: 2012}, {person:103,
year: 2013}];
var yearCounts = data.reduce(function (result, person) {
var currentCount = result[person.year] || 0;
result[person.year] = currentCount + 1;
return result;
}, {});
var year,
yearCountArray = [];
for (year in yearCounts) {
if (yearCounts.hasOwnProperty(year)) {
yearCountArray.push({
year: year,
count: yearCounts[year]
});
}
}
console.log(yearCountArray);