Я хотел бы сгруппировать массив JSON двумя свойствами (name и address2), а затем уменьшить его. Вот текущий JSON:Применение нескольких группировок с использованием lodash
{
"clientId": "FOO",
"name": "John Doe",
"address1": "London",
"address2": "1 High Street",
"invoiceNumber": "1234",
"itemDescription": "Item 1",
"itemQuantity": 1
},
{
"clientId": "BAR",
"name": "John Doe",
"address1": "London",
"address2": "1 Oxford Street",
"invoiceNumber": "0987",
"itemDescription": "Item 2",
"itemQuantity": 1
},
{
"clientId": "FOO",
"name": "John Doe",
"address1": "London",
"address2": "1 High Street",
"invoiceNumber": "5678",
"itemDescription": "Item 3",
"itemQuantity": 1
}
Это то, что я хотел бы достичь:
[
{
"clientId": "FOO",
"name": "John Doe",
"address1": "London",
"address2": "1 High Street",
"deliveries": [
{
"invoiceNumber": "1234",
"itemQuantity": 1,
"itemDescription": "Item 1"
},
{
"invoiceNumber": "5678",
"itemDescription": "Item3",
"itemQuantity": 1
}
]
},
{
"clientId": "BAR",
"name": "JohnDoe",
"address1": "London",
"address2": "12 Oxford Street",
"deliveries": [
{
"invoiceNumber": "0987",
"itemDescription": "Item2",
"itemQuantity": 1
}
]
}
]
А вот код, который я до сих пор, не производить то, что я надеюсь, что это будет:
var groups = _.groupBy(rows, function(value) {
return value.name + '#' + value.address2;
});
var data = _.map(groups, function(group) {
return {
clientId: group[0].clientId,
name: group[0].name,
address1: group[0].address1,
address2: group[0].address2,
deliveries: [{
invoiceNumber: _.map(group,'invoiceNumber'),
itemDescription: _.map(group,'itemDescription'),
itemQuantity: _.map(group,'itemQuantity'),
}]
}
});
И он производит следующий вывод:
[ { clientId: 'FOO',
name: 'John Doe',
address1: 'London',
address2: '1 High Street',
deliveries: [ [Object] ] } ]
Я не уверен, как создать массив объектов «поставок» в функции lodash _.map. Пожалуйста помоги! :)
Ваш код может работать только в console.log отпечатки '[объект]'. Попытайтесь изменить свой журнал на console.log (client.deliveris) и посмотреть, не изменит ли он что-либо – Meir
@Meir - он не работает, он создает массивы в пределах поставок, поэтому invoiceNumber становится ['1234', '5678'] и т. Д. , Я знаю, что могу добиться этого, запустив дополнительное forEach для итерации по каждому из них и создав отдельный объект доставки, который будет объединен с исходным массивом, но, безусловно, должно быть лучшее решение. – problematic
Если вы хотите узнать, что находится в [Object]. Сделайте это: 'var util = require ('util'); console.log (util.inspect (data, {showHidden: false, depth: null})); ' –