2017-05-07 26 views
0

阵列中的我有对象的数组:集团通过对象的数量在香草的Javascript

[{person:101, year: 2012}, {person:102, year: 2012}, {person:103, year: 2013}] 

而且我希望能够通过SQL返回的总次数每年(很像组将实现)的格式为:

[{year: 2012, count:2}, {year: 2013, count:1}] 

在Vanilla Javascript中实现此目的的最佳方法是什么?

+1

会更有用的输出格式不'{ “2012” :2,“2013”​​:1}'?因为这将*很容易通过一个简单的循环实现;) –

+2

检查[that](http://stackoverflow.com/questions/5667888/counting-the-occurrences-of-javascript-array-elements)并且有下次尝试。你有谷歌,甚至没有尝试? – Sylogista

回答

0

正如其他人所说,对象将是一个更适合汇总数据。你可以使用一个正常的循环,或reduce做到这一点:

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

如果你真的需要它作为一个数组,你可以在遍历对象并将其转换为数组:

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

0

您需要使用简单的象下面这样:

var data = [{person:101, year: 2011}, 
      {person:102, year: 2012}, 
      {person:103, year: 2011}]; 


var result = {}, 
    i; 

for(i=0; i < data.length; i++){ 
    let year = data[i].year; 
    if(typeof result[year] === 'undefined'){ 
    result[year] = 1; 
    } 
    else{ 
    result[year] = result[year] + 1; 
    } 

} 

console.log(result);