Cyan Coder
Cyan Coder

Reputation: 87

How to sum array objects become a object?

I have a question for this case

Input:

data = [
{ number_1: 10, number_2: 20 },
{ number_1: 15, number_2: 5 },
{ number_1: 15, number_2: 35 },
];

Output:

dataSum = { sum_number_1: 40, sum_number_2: 60 };

I want to ask for 2 method we can use: array.reduce and array.forEach. And I see we need to transform array to an object for output. Thanks for your help.

Upvotes: 0

Views: 64

Answers (4)

Nina Scholz
Nina Scholz

Reputation: 386578

You could take a dynamic approach which sums all properties of an object.

const
    data = [{ number_1: 10, number_2: 20 }, { number_1: 15, number_2: 5 }, { number_1: 15, number_2: 35 }],
    result = data.reduce((r, o) => {
        Object.entries(o).forEach(([k, v]) => r[k] = (r[k] || 0) + v)
        return r;
    });

console.log(result);

Upvotes: 2

sbgib
sbgib

Reputation: 5828

Try like this:

data = [
   { number_1: 10, number_2: 20 },
   { number_1: 15, number_2: 5 },
   { number_1: 15, number_2: 35 },
];

const reducer = (accumulator, currentValue) => {
  accumulator.sum_number_1 += currentValue.number_1;
  accumulator.sum_number_2 += currentValue.number_2;
  return accumulator;
};

console.log(data.reduce(reducer, { sum_number_1: 0, sum_number_2: 0 }));

The reduce function is used with an initial value structured as the final object to be returned. The numbers are summed in the callback function to then return the result.

Upvotes: 2

Adam Azad
Adam Azad

Reputation: 11297

The initial schema for Array.reduce is really up to you.

const data = [{
    number_1: 10,
    number_2: 20
  },
  {
    number_1: 15,
    number_2: 5
  },
  {
    number_1: 15,
    number_2: 35
  },
];

const res = data.reduce((acc, {
  number_1,
  number_2
}) => {
  acc.sum_number_1 += number_1;
  acc.sum_number_2 += number_2;

  return acc;
}, {
  sum_number_1: 0,
  sum_number_2: 0
})

console.log(res)

And here's forEach

const data = [{
    number_1: 10,
    number_2: 20
  },
  {
    number_1: 15,
    number_2: 5
  },
  {
    number_1: 15,
    number_2: 35
  },
];

const res = {
  sum_number_1: 0,
  sum_number_2: 0
};

data.forEach(({
  number_1,
  number_2
}) => {
  res.sum_number_1 += number_1;
  res.sum_number_2 += number_2;
})

console.log(res)

Upvotes: 2

mgm793
mgm793

Reputation: 2066

Is this what you want?

data.reduce((acc, {number_1, number_2}) => {
    acc.sum_number_1 += number_1;
    acc.sum_number_2 += number_2;
    return acc;
},{sum_number_1: 0, sum_number_2: 0})

Upvotes: 2

Related Questions