2016-12-02 5 views
-3

Ich habe ein Array von Objekt wie folgt:wie Objektarray mit demselben Schlüsselwert summieren

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"}, 
     ]; 

und hier ist mein angestrebtes Ergebnis:

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} 
] 

Gibt es einen einfachen Weg, dies zu tun ?

+3

Ja. Was hast du bisher versucht? – GAntoine

+0

Ich versuche diesen Code ..... var dict = {}; für (i = 0; i user7238915

+0

Bitte überprüfen Sie [ask], und aktualisieren Sie Ihre Frage, um eine [mcve] von *** einzubeziehen, was Sie versucht haben ***, andernfalls ist diese Frage [off-topic (# 1)] (/ help/on-topic). – zzzzBov

Antwort

1

Überprüfen Sie bei jeder Iteration einer for-Schleife, ob die "date_number" die gleiche ist wie bei der vorherigen Iteration.

Wenn es nicht das gleiche Datum ist, push() das Objekt in einem Array und es zurücksetzen.

Dieses Code-Snippet funktioniert.

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