2017-05-07 6 views
0

私はオブジェクトの配列がありますバニラJavaScriptで配列内のオブジェクトの数によってグループ

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

をそして私はSQLでのことで多くのグループのような各年の総カウント数を(返すことができるようにしたいです

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

バニラのJavascriptでこれを達成する最も良い方法は何ですか?あなたは以下のようにするための簡単な使用する必要が

+1

より有用な出力フォーマットが '{ "2012" ではないでしょう:2、 "2013":1} '?これは簡単なループで実現するのは非常に簡単だからです) –

+2

[that](http://stackoverflow.com/questions/5667888/counting-the-occurrences-of-javascript-array-elements)をチェックし、次回は試してみてください。あなたはGoogleを持っていて、試してみませんか? – 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); 
関連する問題