Суммировать значение поля в массиве объектов

Получение данных из CSV-файла с последующим назначением массиву объектов SmartPostShipments []. Вывести «общее» количество элементов в массиве довольно просто с помощью свойства .length, но мне также нужно получить сумму значений каждого поля в массиве объектов, который называется ['Сумма чистой стоимости']. Каков наилучший способ добиться этого? Я согласен с использованием console.info() для этой иллюстрации.

const { parse } = require('csv-parse')
const fs = require('fs')
const SmartPostShipments = []

function isSmartpost(shipment) {
    return shipment['Service Type'] === 'SmartPost'
}

fs.createReadStream('test.csv')
    .pipe(parse({
        columns: true
    }))
    
    .on('data', (data) => {
        if (isSmartpost(data)) {
            SmartPostShipments.push(data)
        }

 })
    .on('error', (err) => {
        console.info(err)
    })

 .on ('end', () => {
        
    // This outputs each individual 'net charge amount', but how do I just display the sum 
    // total?
    
    console.info(SmartPostShipments.map((shipment)=> {
            return shipment['Net Charge Amount']
        }))
        
       console.info(`${SmartPostShipments.length} Smartpost shipments.`)
     
    })

Несколько вариантов кода выглядят хорошо, но данные добавляются, а не суммируются. Вот фото вывода:

 console.info(SmartPostShipments.map((shipment)=> {
        return shipment['Net Charge Amount']
    }))
            
    const sum = SmartPostShipments.reduce((partialSum, shipment) => partialSum + shipment['Net Charge Amount'], 0)
    console.info(sum)

    const sumSP = SmartPostShipments.reduce((cur, pre)=> {
        return cur+=pre['Net Charge Amount'];
      },0)
      console.info(sumSP)

Пожалуйста, поделитесь своим CSV-файлом.

tzztson 13.02.2023 22:12

Добавление parseInt() помогло: return cur += parseInt(pre['Net Charge Amount']); Общая стоимость = 490

Derek 13.02.2023 22:29

Поцарапать это... используя parseFloat(), а не parseInt().

Derek 13.02.2023 22:33
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
3
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
const sum = SmartPostShipments.reduce((cur, pre)=> {
  return cur+=pre['Net Charge Amount'];
},0)
console.info(sum)

Пожалуйста, попробуйте выше. Надеюсь, что это работает.

Он ищет сумму свойств объектов, я думаю, это должно быть что-то вроде return cur+=pre['Net Charge Amount'];

mpallansch 13.02.2023 21:37

Спасибо, я просто забыл добавить это.

tzztson 13.02.2023 21:53

Это вариант этого вопроса. Применительно к вашей ситуации код будет таким:

const sum = SmartPostShipments.reduce((partialSum, shipment) => partialSum + shipment['Net Charge Amount'], 0)

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