Sachihiro
Sachihiro

Reputation: 1781

Find sum of objects inside array using reduce

I am trying to find the total from objects inside an array, which each object has a price and quantity, i can find the total when the array has exactly two objects, but for more than two it produces NaN.

arr = [ { quantity: 1, price: 30 },
{ quantity: 1, price: 40 },
{ quantity: 2, price: 10 },
{ quantity: 1, price: 10 } ]


const reducer = (accumulator, currentValue) => {
    var a = accumulator.quantity * accumulator.price;
    var b = currentValue.quantity * currentValue.price;
    return a + b;
}
console.log(arr.reduce(reducer));  // sum if array contains 2 objects, NaN otherwise.

Upvotes: 0

Views: 507

Answers (3)

Eslam Abu Hugair
Eslam Abu Hugair

Reputation: 1208

you can simply say

arr = [ { quantity: 1, price: 30 },
{ quantity: 1, price: 40 },
{ quantity: 2, price: 10 },
{ quantity: 1, price: 10 } ]


const total = arr.reduce((total,item)=>{
   total +=  item.quantity * item.price;
  return total
},0)

Upvotes: -1

DXNNX
DXNNX

Reputation: 11

arr = [ { quantity: 1, price: 30 },
{ quantity: 1, price: 40 },
{ quantity: 2, price: 10 },
{ quantity: 1, price: 10 } ]

const reducer = (accumulator, currentValue) {
    return accumulator + (currentValue.quantity * accumulator.price);
}

console.log(arr.reduce(reducer, 0 ));

Upvotes: 0

Isaac Khoo
Isaac Khoo

Reputation: 545

    let arr = [ 
    { quantity: 1, price: 30 },
    { quantity: 1, price: 40 },
    { quantity: 2, price: 10 },
    { quantity: 1, price: 10 } 
    ]

    let reducer = (acc, cur) => {
     return acc + (Number(cur.quantity) * Number(cur.price));
    };

    console.log(arr.reduce(reducer, 0));
    // 100

Your reducer function seems to be wrong. Accumulator no longer has any parameters to it, since well, it accumulates - its an integer. Also, set a initial value for your accumulator to start accumulating from, as shown in the reduce function, second parameter input

Upvotes: 2

Related Questions