Я пытаюсь нажать массив объектов на другой существующий массив объектов.
Пример:
var invoices = [
{
InvoiceId: 2,
Contact: 'Jim',
InvoiceNumber: '3',
LineItems: []
},
{
InvoiceId: 1002,
Contact: 'Peter',
InvoiceNumber: '4' },
LineItems: []
}];
var invoiceLines = [
{ Id: 1003,
InvoiceId: 2 },
Amount: 1000,
{ Id: 1004,
InvoiceId: 2,
Amount: 1000,
{ Id: 1006,
InvoiceId: 1002,
Amount: 3000,}];
Так что я пытаюсь взять каждый объект в массиве invoiceLines, и подтолкнуть ее к invoices.Lineitems, если соответствует InvoiceID. Таким образом, это будет выглядеть так:
var result= [
{
InvoiceId: 2,
Contact: 'Jim',
InvoiceNumber: '3',
LineItems: [{
Id: 1003,
InvoiceId: 1002,
Amount: 1000},{
Id: 1004,
InvoiceId: 1002,
Amount: 1000}]
},
{
InvoiceId: 1002,
Contact: 'Peter',
InvoiceNumber: '4' },
LineItems: [{
Id: 1006,
InvoiceId: 1002,
Amount: 3000}]
}];
Я пробовал следующее:
var result = _({})
.merge(
_(flattenedinvoiceLines).groupBy("InvoiceId").value(),
_(invoices).groupBy("Id").value())
.values()
.flatten()
.value();
}
Как бы то ни было, это просто вталкивается в массив счетов-фактур, а не invoice.LineItems.
Вы можете проходить через invoices
а затем находить все совпадения в invoiceLines
, InvoiceId
. ниже пример кода
var invoices = [
{
InvoiceId: 2,
Contact: 'Jim',
InvoiceNumber: '3',
LineItems: []
},
{
InvoiceId: 1002,
Contact: 'Peter',
InvoiceNumber: '4',
LineItems: []
}
];
var invoiceLines = [
{ Id: 1003,
InvoiceId: 2,
Amount: 1000
},
{ Id: 1004,
InvoiceId: 2,
Amount: 1000,
},
{ Id: 1006,
InvoiceId: 1002,
Amount: 3000
}
];
const result = invoices.map(invoice => {
invoice.LineItems = invoiceLines.filter((line) => line.InvoiceId === invoice.InvoiceId)
return invoice;
})
console.log(result)
Поскольку вы используете Lodash, используйте:
_.map
для итерации по массиву invoices
_.filter
чтобы найти соответствующие строки из invoiceLines
соответствии с InvoiceId: item.InvoiceId
_.extend
добавить каждый отфильтрованный и сопоставленный invoiceLine
в LineItems
var invoices = [{
InvoiceId: 2,
Contact: 'Jim',
InvoiceNumber: '3',
LineItems: []
},
{
InvoiceId: 1002,
Contact: 'Peter',
InvoiceNumber: '4',
LineItems: []
}
];
var invoiceLines = [{
Id: 1003,
InvoiceId: 2,
Amount: 1000
},
{
Id: 1004,
InvoiceId: 2,
Amount: 1000
},
{
Id: 1006,
InvoiceId: 1002,
Amount: 3000
}
];
var mergedInvoices = _.map(invoices, function(item) {
_.extend(item.LineItems, _.filter(invoiceLines, { InvoiceId: item.InvoiceId }));
return item;
});
console.log(mergedInvoices);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
const invoices = [{
InvoiceId: 2,
Contact: 'Jim',
InvoiceNumber: '3',
LineItems: []
},
{
InvoiceId: 1002,
Contact: 'Peter',
InvoiceNumber: '4',
LineItems: []
}
];
const invoiceLines = [{
Id: 1003,
InvoiceId: 2,
Amount: 1000
},
{
Id: 1004,
InvoiceId: 2,
Amount: 1000
},
{
Id: 1006,
InvoiceId: 1002,
Amount: 3000
}
];
const mergedInvoices = _.map(invoices, item => {
_.extend(item.LineItems, _.filter(invoiceLines, { InvoiceId: item.InvoiceId }));
return item;
});
console.log(mergedInvoices);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>