简体   繁体   中英

How to sum up values from a javascript object?

I have the following values in an array which I am trying to get the sum of it. This is how it looks like from the chrome developer tools

(3) [{…}, {…}, {…}]0: {ID: 1, ProductName: " New phone 1", Price: "€ 600"}1: {ID: 3, ProductName: " New phone 2", Price: "€ 1000"}2: {ID: 4, ProductName: " New phone 3", Price: "€ 400"}length: 3__proto__: Array(0)

I would like to get the prices of each Item and compute a sum of all the values. I getting these values from an Api and it could sometimes be more items or less. Currently this is how I am getting the values

function setTotalPrice() {
    fetch("http://localhost:1234/api/Product")
        .then(response=>response.json())
        .then(data => {
            data.forEach(element => {
                console.log(element.Price)
            });
        })
}

You need to get the number from the Price string ( split ) and sum them using reduce

 const data = [ { ID: 1, ProductName: 'New phone 1', Price: '€ 600' }, { ID: 3, ProductName: 'New phone 2', Price: '€ 1000' }, { ID: 4, ProductName: 'New phone 3', Price: '€ 400' }, ]; const result = data.reduce((acc, val) => acc + parseInt(val.Price.split(' ')[1], 10), 0); console.log(result); console.log('€ ' + result);

If API can return a floating point number for Price , need to use parseFloat instead:

 const data = [ { ID: 1, ProductName: 'New phone 1', Price: '€ 600.25' }, { ID: 3, ProductName: 'New phone 2', Price: '€ 1000' }, { ID: 4, ProductName: 'New phone 3', Price: '€ 400.10' }, ]; const result = data.reduce((acc, val) => acc + parseFloat(val.Price.split(' ')[1]), 0); console.log(result); console.log('€ ' + result);

const sum = data
  .map(({ price }) => {
    const digitsStartIndex = price.substring(price.findIndex(' ') + 1);
    return parseFloat(digitsStartIndex, 10)
  })
  .reduce((a, b) => a + b, 0)
console.log(`€ ${sum}`)

You could use reduce with a little bit of regex /\d+/

 let data = [ { id: 1, product: 'phone 1', price: '€ 400' }, { id: 3, product: 'phone 2', price: '€ 3000' }, { id: 4, product: 'phone 3', price: '€ 600' }, ]; let sum = data.reduce((a,{price}) => a + Number(price.match(/\d+/)),0); console.log(sum);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM