2016-12-02 3 views
-3

У меня есть массив объектов, как это:как суммировать массив объектов с таким же значением ключа

var original_db = [ 
      {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"ORIGINATOR-CANCEL"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
     ]; 

и вот мой ожидаемый результат:

result : 
[ 
{date_diff : "2016/10/31", NORMAL_CLEARING : 2, NO_ANSWER : 1, ORIGINATOR-CANCEL : 1}, 
{date_diff : "2016/10/30", NORMAL_CLEARING : 1, NO_ANSWER : 3}, 
{date_diff : "2016/10/29", NORMAL_CLEARING : 1, ORIGINATOR-CANCEL : 2} 
] 

Есть простой способ сделать это ?

+3

Да. что ты уже испробовал? – GAntoine

+0

Я пробую этот код ..... var dict = {}; for (i = 0; i user7238915

+0

Просмотрите [ask] и обновите свой вопрос, чтобы включить [mcve] из ***, что вы пробовали ***, в противном случае этот вопрос [off-topic (# 1)] (/ help/on-topic). – zzzzBov

ответ

1

На каждой итерации цикла for проверьте, совпадает ли «дата_сот» с предыдущей итерацией.

Если это не та же дата, push() объект в массиве и сбросьте его.

Этот фрагмент кода работает.

var original_db = [ 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
]; 
 
    
 
var resultArr = []; 
 
var resultObj = {}; 
 
var date_number = 1; 
 

 
for (i=0; i<original_db.length; i++) { 
 
    
 
    // If the "date_number" changed, push the object to array. 
 
    if (date_number != original_db[i]["date_number"]){ 
 
     date_number = original_db[i]["date_number"] 
 
     resultArr.push(resultObj); 
 
     resultObj = {}; 
 
    } 
 
    
 
    // Count add each "hangup_cause" and its count 
 
    resultObj["date_diff"] = original_db[i]["date_diff"]; 
 
    var value = original_db[i]["hangup_cause"]; 
 
    var count = (resultObj[value] || 0) + 1; 
 
    resultObj[value] = count; 
 
} 
 

 
// Push the last object at the end of the loop 
 
resultArr.push(resultObj); 
 

 
// Show it in console. 
 
console.log(JSON.stringify(resultArr))