Как получить сумму в массиве объектов

У меня есть этот массив, и я хочу получить сумму каждого 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 }

Было бы полезно, если бы ваш пример вывода мог быть получен из примера ввода JSON. Кроме того, вам нужно отредактировать вопрос и показать нам, что вы пробовали, чтобы мы могли улучшить это или объяснить, где вы ошиблись.

Peter B 23.07.2024 00:06

внес в него изменения

Osemu Aimiosior 23.07.2024 00:35

разобрался, я исправил цикл, добавив блок else, который мне помог, спасибо

Osemu Aimiosior 23.07.2024 00:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы можете использовать метод 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);

Другие вопросы по теме