2016-10-07 4 views
0

I a JSON Array haben, die die folgenden Daten aufweist:Merge unterschiedlichen Reihen eines Arrays unter Verwendung lodash

[{"customer":"xyz","date":"10.10.2014","attr1":"ABC","attr2":"001"},{"customer":"xyz","date":"10.10.2014","attr3":"XYZ","attr4":"123"},{"customer":"xyz","date":"11.10.2014","attr1":"DEF","attr2":"002"},{"customer":"xyz","date":"11.10.2014","attr3":"DDD","attr4":"222"}] 

Gibt es eine Möglichkeit, unter Verwendung von lodash, ich kann das Array verschmelzen, so dass dies zu:

[{"customer":"xyz","date":"10.10.2014","attr1":"ABC","attr2":"001","attr3":"XYZ","attr4":"123"},{"customer":"xyz","date":"11.10.2014","attr1":"DEF","attr2":"002","attr3":"DDD","attr4":"222"}] 

Verwenden Sie das Attribut "date", um mehrere Zeilen mit unterschiedlichen JSON-Attributen in einem einzelnen JSON-Objekteintrag zusammenzuführen?

+0

Was passieren soll, wenn die 'date' Werte gleich sind, aber die' customer' Werte unterschiedlich sind (das ist nicht möglich, mit Ihren Daten)? – cybersam

+0

Der Kunde wäre immer der gleiche. – mithrandir

+0

Welche Version von lodash verwenden Sie? – Meir

Antwort

1

Verwenden Sie _.groupBy(), um die Objekte nach Datum zu gruppieren. Dann _.merge() jede Gruppe:

var customers = [{"customer":"xyz","date":"10.10.2014","attr1":"ABC","attr2":"001"},{"customer":"xyz","date":"10.10.2014","attr3":"XYZ","attr4":"123"},{"customer":"xyz","date":"11.10.2014","attr1":"DEF","attr2":"002"},{"customer":"xyz","date":"11.10.2014","attr3":"DDD","attr4":"222"}]; 
 

 
var result = _(customers) 
 
    .groupBy('date') // group the objects by date 
 
    .map(function(item) { // map each group 
 
    return _.merge.apply(_, item); // merge all objects in the group 
 
    }) 
 
    .value(); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.js"></script>

0

Hier ist eine Lösung mit Lodash 3.10.1. Ich nahm an, dass Sie jedes Paar zusammenführen möchten und dass das zweite Element eines Paares vorhandene Eigenschaften von der ersten überschreiben wird (falls es solche gibt).

var source = [{"customer":"xyz","date":"10.10.2014","attr1":"ABC","attr2":"001"},{"customer":"xyz","date":"10.10.2014","attr3":"XYZ","attr4":"123"},{"customer":"xyz","date":"11.10.2014","attr1":"DEF","attr2":"002"},{"customer":"xyz","date":"11.10.2014","attr3":"DDD","attr4":"222"}]; 

var chunked = _.chunk(source, 2); 

var result = _.map(chunked, _.spread(_.merge)); 

console.log(result); 

Und hier ist ein working jsbin.

Verwandte Themen