У меня есть этот массив, и я хочу получить сумму каждого Order.item.
[
{"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
"CustomerId":"669aa55079cce2e96f9a7e69",
"CustomerName":"Erigbemi",
"Date":"2024/07/19",
"TrackingId":"43035",
"Status":"Processing",
"Amount":{"$numberInt":"25000"},
"Item":"Orange"
}
}, {"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
"CustomerId":"669aa55079cce2e96f96t77",
"CustomerName":"James",
"Date":"2024/07/19",
"TrackingId":"42335",
"Status":"Processing",
"Amount":{"$numberInt":"15000"},
"Item":"Tomatoes"
}, {"OrderReceiverId":"6698eea782e24cc9d42eab7f",
"Order":{
"CustomerId":"669aa55079cce2e96f9a7e69",
"CustomerName":"Erigbemi",
"Date":"2024/07/19",
"TrackingId":"22235",
"Status":"Processing",
"Amount":{"$numberInt":"15000"},
"Item":"Tomatoes"
}
]
Как мне получить сумму каждого «предмета», что-то вроде этого
«Рис»: 30000 «Помидоры»: 15000
я попробовал это
let itm = {};
sellingInfo.forEach(order => {
const item = order.Order.Item;
const amt = order.Order.Amount;
if (!itm[item]){
itm[item] = amt;
}
itm[item] += amt;
})
res.json(itm);
Но я, кажется, неправильно выразился, вот что у меня получается { «Оранжевый»: 50000, «Помидоры»: 45000 }
внес в него изменения
разобрался, я исправил цикл, добавив блок else, который мне помог, спасибо
вы можете использовать метод Array.reduce()
const data =
[ { OrderReceiverId: '6698eea782e24cc9d42eab7f'
, Order:
{ CustomerId : '669aa55079cce2e96f9a7e69'
, CustomerName : 'Erigbemi'
, Date : '2024/07/19'
, TrackingId : '43035'
, Status : 'Processing'
, Amount : { $numberInt: '25000' }
, Item : 'Orange'
} }
, { OrderReceiverId: '6698eea782e24cc9d42eab7f'
, Order:
{ CustomerId : '669aa55079cce2e96f96t77'
, CustomerName : 'James'
, Date : '2024/07/19'
, TrackingId : '42335'
, Status : 'Processing'
, Amount : { $numberInt: '20000' }
, Item : 'Rice'
} }
, { OrderReceiverId: '6698eea782e24cc9d42eab7f'
, Order:
{ CustomerId : '669aa55079cce2e96f9a7e69'
, CustomerName : 'Erigbemi'
, Date : '2024/07/19'
, TrackingId : '22235'
, Status : 'Processing'
, Amount : { $numberInt: '12000' }
, Item : 'Rice'
} }
];
const Sums = data.reduce( (r,{Order}) =>
{
r[Order.Item] ??= 0;
r[Order.Item] += +Order.Amount.$numberInt;
return r;
},{});
console.info( Sums );
.as-console-wrapper{max-height:100% !important;top:0}
.as-console-row::after{display:none !important;}
Вы можете использовать метод уменьшения для накопления общих сумм для каждого элемента:
const data = [
{
"OrderReceiverId": "6698eea782e24cc9d42eab7f",
"Order": {
"CustomerId": "669aa55079cce2e96f9a7e69",
"CustomerName": "Erigbemi",
"Date": "2024/07/19",
"TrackingId": "43035",
"Status": "Processing",
"Amount": {"$numberInt": "25000"},
"Item": "Orange"
}
},
{
"OrderReceiverId": "6698eea782e24cc9d42eab7f",
"Order": {
"CustomerId": "669aa55079cce2e96f96t77",
"CustomerName": "James",
"Date": "2024/07/19",
"TrackingId": "42335",
"Status": "Processing",
"Amount": {"$numberInt": "20000"},
"Item": "Rice"
}
},
{
"OrderReceiverId": "6698eea782e24cc9d42eab7f",
"Order": {
"CustomerId": "669aa55079cce2e96f9a7e69",
"CustomerName": "Erigbemi",
"Date": "2024/07/19",
"TrackingId": "22235",
"Status": "Processing",
"Amount": {"$numberInt": "12000"},
"Item": "Rice"
}
}
];
const totals = data.reduce((acc, entry) => {
const order = entry.Order;
const item = order.Item;
const amount = parseInt(order.Amount.$numberInt, 10);
if (acc[item]) {
acc[item] += amount;
} else {
acc[item] = amount;
}
return acc;
}, {});
console.info(totals);
Было бы полезно, если бы ваш пример вывода мог быть получен из примера ввода JSON. Кроме того, вам нужно отредактировать вопрос и показать нам, что вы пробовали, чтобы мы могли улучшить это или объяснить, где вы ошиблись.