2016-10-07 19 views
0

を使用してアレイの異なる行をマージ:私は、次のエントリを持ってJSON配列を持つlodash

:これはなるように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"}] 

は、方法はあります

[{"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"}] 

基本的に "date"属性を使用して、異なるJSON属性を持つ複数の行を1つのJSONオブジェクトエントリにマージしますか?

+0

'date'値が同じであるが、' customer'値は(あなたのデータを持つことはできません)が異なる場合にどうしますか? – cybersam

+0

お客様は常に同じです。 – mithrandir

+0

使用しているロダッシュのバージョンは何ですか? – Meir

答えて

1

_.groupBy()を使用してオブジェクトを日付でグループ化します。その後_.merge()各グループ:

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

ここでは、lodash 3.10.1を使用したソリューションです。私はあなたが各ペアをマージすることを前提とし、ペアの2番目の要素が最初の要素の既存のプロパティを上書きすることを前提としています(存在する場合)。

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

そしてここにはworking jsbinがあります。

関連する問題