Reputation: 87
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
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
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
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
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