2016-10-07 2 views
0

У меня есть массив JSON, который имеет следующие данные:Объединить различные строки массива с помощью 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"}] 

есть способ, с помощью lodash, я могу объединить массив так, что это становится:

[{"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 в одну запись объекта JSON?

+0

Что должно произойти, если 'date' значения одинаковы, но' значения customer' различны (в том, что не представляется возможным с вашими данными)? – cybersam

+0

Клиент всегда будет таким же. – mithrandir

+0

Какую версию lodash вы используете? – 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. Я предположил, что вы хотите объединить каждую пару и что второй элемент пары переопределит существующие свойства с первого (если они есть).

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.

Смежные вопросы