[英]Subtract values from array of objects
I need to subtract total amount - paid amount which is available.scheduleBudget - paidAmount.paid我需要减去可用的总金额 - 已付金额。scheduleBudget -paidAmount.paid
const available = [
{ scheduleBudget: 21600, schudule_number: "11020" },
{ scheduleBudget: 1598000, schudule_number: "11010" },
];
const paidAmount = [
{ paid: 88488, schudule_number: "11010" },
{ paid: 7140, schudule_number: "11020" },
];
Expected output:预期 output:
[
{ balance: 1509512, schudule_number: "11010" },
{ balance: 14460, schudule_number: "11020" },
];
code to get output获取 output 的代码
Object.values(available).forEach((key) => {
console.log(key);
});
One way to do this is to generate a new object from paidAmount
where schudule_number
is the key and paid
the value.一种方法是从
paidAmount
生成一个新的 object,其中schudule_number
是键并paid
了值。 Then you can simply map
available
to subtract the appropriate paid
amount from scheduleBudget
:然后,您
available
简单地map
从scheduleBudget
中减去适当的paid
金额:
const available = [ { scheduleBudget: 21600, schudule_number: "11020" }, { scheduleBudget: 1598000, schudule_number: "11010" }, ]; const paidAmount = [ { paid: 88488, schudule_number: "11010" }, { paid: 7140, schudule_number: "11020" }, ]; const pA = {}; paidAmount.forEach(p => pA[p.schudule_number] = p.paid); const result = available.map(({scheduleBudget, schudule_number}) => ({ scheduleBudget: scheduleBudget-pA[schudule_number], schudule_number}) ); console.log(result);
You could take an object for the balances groupd by schedule_number
and get the result from the object.您可以将 object 用于按
schedule_number
分组的余额,并从 object 中获取结果。
This approach allows more than one payment for a schedule_number
.这种方法允许对
schedule_number
进行多次付款。
const available = [{ scheduleBudget: 21600, schedule_number: "11020" }, { scheduleBudget: 1598000, schedule_number: "11010" }], paidAmount = [{ paid: 88488, schedule_number: "11010" }, { paid: 7140, schedule_number: "11020" }], balances = Object.fromEntries(available.map(({ scheduleBudget, schedule_number }) => [schedule_number, scheduleBudget] )); paidAmount.forEach(({ paid, schedule_number }) => balanceses[schedule_number] -= paid); const result = Object.entries(balances).map(([schedule_number, balance]) => ({ balance, schedule_number })); console.log(result);
So you do this to get the answer:所以你这样做是为了得到答案:
const available = [
{ scheduleBudget: 21600, schudule_number: '11020' },
{ scheduleBudget: 1598000, schudule_number: '11010' },
]
const paidAmount = [
{ paid: 88488, schudule_number: '11010' },
{ paid: 7140, schudule_number: '11020' },
]
let finalAvailable = []
available.forEach((value) => {
paidAmount.forEach((item) => {
if (value.schudule_number === item.schudule_number) {
scheduleBudget = value.scheduleBudget - item.paid
finalAvailable.push({ scheduleBudget, schudule_number: item.schudule_number })
}
})
return finalAvailable
})
console.log('finalAvailable:', finalAvailable)
const available = [ { scheduleBudget: 21600, schudule_number: '11020' }, { scheduleBudget: 1598000, schudule_number: '11010' }, ] const paidAmount = [ { paid: 88488, schudule_number: '11010' }, { paid: 7140, schudule_number: '11020' }, ] let finalAvailable = [] available.forEach((value) => { paidAmount.forEach((item) => { if (value.schudule_number === item.schudule_number) { scheduleBudget = value.scheduleBudget - item.paid finalAvailable.push({ scheduleBudget, schudule_number: item.schudule_number }) } }) return finalAvailable }) console.log('finalAvailable:', finalAvailable)
If you want use forEach
you need to create a third object and forEach
both object and substract the value when ticket fit together如果要使用
forEach
,则需要创建第三个 object 和forEach
两者 object 并在票证合在一起时减去值
const available = [{scheduleBudget: 21600, schudule_number: '11020'}, {scheduleBudget: 1598000, schudule_number: '11010'}]; const paidAmount = [{paid: 88488, schudule_number: '11010'}, {paid: 7140, schudule_number: '11020'}]; let newOutput = []; Object.values(available).forEach(keyavailable => { Object.values(paidAmount).forEach(keypaidAmount => { if (keyavailable.schudule_number === keypaidAmount.schudule_number) { let sub = keyavailable.scheduleBudget - keypaidAmount.paid; let data = {'balance': sub, 'schudule_number': keypaidAmount.schudule_number}; newOutput.push(data); } }) }) console.log(newOutput);
Assuming the order in available
and paidAmount
arrays not must match the schulude_number
:假设
available
和paidAmount
arrays 中的订单必须与schulude_number
不匹配:
const available = [ { scheduleBudget: 21600, schudule_number: '11020' }, { scheduleBudget: 1598000, schudule_number: '11010' } ]; const paidAmount = [ { paid: 88488, schudule_number: '11010' }, { paid: 7140, schudule_number: '11020' } ]; function pay(budgets, paid) { const budgetObj = budgets.reduce((a,b) => { a[b.schudule_number] = {balance:b.scheduleBudget, schudule_number:b.schudule_number}; return a; },{}); paid.forEach(p => budgetObj[p.schudule_number].balance -= p.paid); return Object.values(budgetObj); } console.log(pay(available, paidAmount));
If both of available
and paidAmount
have items that share a schudule_number within their respective lists then perhaps something like this would work:如果
available
和paidAmount
在各自的列表中都有共享 schudule_number 的项目,那么也许这样的事情会起作用:
const available = [{ scheduleBudget: 21600, schudule_number: "11020" }, { scheduleBudget: 1598000, schudule_number: "11010" }]; const paidAmount = [{ paid: 88488, schudule_number: "11010" }, { paid: 7140, schudule_number: "11020" }]; const balances = [...available, ...paidAmount].reduce( (acc, item) => Object.assign( acc, { [item.schudule_number]: (acc[item.schudule_number] || 0) + (item.scheduleBudget || 0) - (item.paid || 0) } ), {} ); const result = Object.entries(balances).map( ([schudule_number, balance]) => ({ schudule_number, balance }) ); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.