2016-08-07 39 views
2

Ich habe seit Ewigkeiten versucht, diese Arbeit zu machen und immer noch keine Antwort auf etwas, das ich dachte, wäre ganz einfach, versuchen zu gruppieren und zählen Typen, ich habe dies:Holen Sie sich diese JSON in das richtige Format Kette flatten groupby

[ 
    { 
    "type": "TypeOne", 
    "day": "2016-07-07" 
    }, 
    { 
    "type": "TypeOne", 
    "day": "2016-07-07" 
    }, 
    { 
    "type": "TypeTwo", 
    "day": "2016-07-07" 
    }, 
    { 
    "type": "TypeTwo", 
    "day": "2016-07-08" 
    }, 
    { 
    "type": "TypeTwo", 
    "day": "2016-07-08" 
    }, 
    { 
    "type": "TypeThree", 
    "day": "2016-07-08" 
    }, 
    { 
    "type": "TypeThree", 
    "day": "2016-07-09" 
    }, 
    { 
    "type": "TypeFour", 
    "day": "2016-07-09" 
    }, 
    { 
    "type": "TypeTwo", 
    "day": "2016-07-09" 
    }, 
    { 
    "type": "TypeThree", 
    "day": "2016-07-09" 
    }, 
    { 
    "type": "TypeThree", 
    "day": "2016-07-09" 
    }, 
    { 
    "type": "TypeFour", 
    "day": "2016-07-09" 
    } 
] 

ich brauche das Auftreten von Typ nach dem Datum zählen können und es in dieser Struktur:

[ 
    { 
    "date":"2016-07-07" 
    ,"TypeOne":2 
    ,"TypeTwo":1 
    ,"count":3 
    }, 
    { 
    "date":"2016-07-08" 
    ,"TypeTwo":2 
    ,"TypeThree":1 
    ,"count":3 
    }, 
    { 
    "date":"2016-07-09" 
    ,"TypeTwo":1 
    ,"TypeThree":3 
    ,"TypeFour":2 
    ,"count":6 
    } 
] 

ich habe versucht, es mit Strich funktioniert, Kette, groupBy und Karte, einfach nicht in der Lage, es zu ermöglichen. Jede Richtung wird geschätzt.

Antwort

1

iterieren Gerade die Struktur über und die Werte aggregieren:

var dates = [ 
 
    { 
 
    "type": "TypeOne", 
 
    "day": "2016-07-07" 
 
    }, 
 
    { 
 
    "type": "TypeOne", 
 
    "day": "2016-07-07" 
 
    }, 
 
    { 
 
    "type": "TypeTwo", 
 
    "day": "2016-07-07" 
 
    }, 
 
    { 
 
    "type": "TypeTwo", 
 
    "day": "2016-07-08" 
 
    }, 
 
    { 
 
    "type": "TypeTwo", 
 
    "day": "2016-07-08" 
 
    }, 
 
    { 
 
    "type": "TypeThree", 
 
    "day": "2016-07-08" 
 
    }, 
 
    { 
 
    "type": "TypeThree", 
 
    "day": "2016-07-09" 
 
    }, 
 
    { 
 
    "type": "TypeFour", 
 
    "day": "2016-07-09" 
 
    }, 
 
    { 
 
    "type": "TypeTwo", 
 
    "day": "2016-07-09" 
 
    }, 
 
    { 
 
    "type": "TypeThree", 
 
    "day": "2016-07-09" 
 
    }, 
 
    { 
 
    "type": "TypeThree", 
 
    "day": "2016-07-09" 
 
    }, 
 
    { 
 
    "type": "TypeFour", 
 
    "day": "2016-07-09" 
 
    } 
 
]; 
 

 
var result = []; 
 

 
dates.forEach(function(d) { 
 
    var date = result.find(function(da) { return da.date === d.day; }); 
 
    if (!date) { 
 
    date = { date: d.day, count: 0 }; 
 
    result.push(date); 
 
    } 
 
    
 
    date.count++; 
 
    if(!date[d.type]) { 
 
    date[d.type] = 1; 
 
    } else { 
 
    date[d.type]++; 
 
    } 
 
}); 
 

 
console.log(result);

+0

Ja, das ist die Antwort, Dank soviel Tholle, das mich zu töten! Noch eine Frage, könnte ich auch ein "count": Gesamtfeld zu den Gruppen hinzufügen, um die Summe aller Elemente in jeder Gruppe anzuzeigen? – Nigel

+0

@Nigel Sicher. Bearbeitete die Frage und die Antwort. Überlegen Sie, die Antwort zu akzeptieren, wenn sie Ihre Frage beantwortet. – Tholle