Javascript sum array of objects by key es6

You can reduce your data to a dictionary and then map it to an array like so

results = [ { unit: 5, date: '2015-12-04 00:01:00' },
      { unit: 10, date: '2015-12-04 00:01:00' },
      { unit: 5, date: '2015-12-04 00:31:00' },
      { unit: 9, date: '2015-12-04 00:31:00' },
      { unit: 5, date: '2015-12-04 01:01:00' },
      { unit: 10, date: '2015-12-04 01:01:00' },
      { unit: 10, date: '2015-12-04 01:31:00' },
      { unit: 5, date: '2015-12-04 01:31:00' },
      { unit: 10, date: '2015-12-04 02:01:00' },
      { unit: 5, date: '2015-12-04 02:01:00' },
      { unit: 5, date: '2015-12-04 02:31:00' },
      { unit: 9, date: '2015-12-04 02:31:00' },
      { unit: 5, date: '2015-12-04 03:01:00' },
      { unit: 9, date: '2015-12-04 03:01:00' },
      { unit: 5, date: '2015-12-04 03:31:00' },
      { unit: 10, date: '2015-12-04 03:31:00' },
      { unit: 10, date: '2015-12-04 04:01:00' },
      { unit: 5, date: '2015-12-04 04:01:00' }]

// first make an object with {date: unit} value as such
const newResults = results.reduce[[acc, item] => [{
  ...acc,
  [item.date]: [acc[item.date] || 0] + item.unit
}] , {}]

console.log[newResults]
/*
{
  "2015-12-04 00:01:00": 15,
  "2015-12-04 00:31:00": 14,
  "2015-12-04 01:01:00": 15,
  "2015-12-04 01:31:00": 15,
  "2015-12-04 02:01:00": 15,
  "2015-12-04 02:31:00": 14,
  "2015-12-04 03:01:00": 14,
  "2015-12-04 03:31:00": 15,
  "2015-12-04 04:01:00": 15
}
*/

// now if you want array representation for this you can do

const finalResult = Object.keys[newResults].map[key => [{date: key, unit: newResults[key]}]]

console.log[finalResult]
/*
[
  {
    "date": "2015-12-04 00:01:00",
    "unit": 15
  },
  {
    "date": "2015-12-04 00:31:00",
    "unit": 14
  },
  {
    "date": "2015-12-04 01:01:00",
    "unit": 15
  },
  {
    "date": "2015-12-04 01:31:00",
    "unit": 15
  },
  {
    "date": "2015-12-04 02:01:00",
    "unit": 15
  },
  {
    "date": "2015-12-04 02:31:00",
    "unit": 14
  },
  {
    "date": "2015-12-04 03:01:00",
    "unit": 14
  },
  {
    "date": "2015-12-04 03:31:00",
    "unit": 15
  },
  {
    "date": "2015-12-04 04:01:00",
    "unit": 15
  }
]
*/

Sum a Property in an Array of Objects in JavaScript #

To sum a property in an array of objects:

  1. Call the reduce[] method to iterate over the array.
  2. On each iteration increment the sum with the specific value.
  3. The result will contain the sum of the values for the specific property.

Copied!

const arr = [ {id: 1, salary: 10}, {id: 2, salary: 20}, {id: 3, salary: 30}, ]; const sum = arr.reduce[[accumulator, object] => { return accumulator + object.salary; }, 0]; console.log[sum]; // 👉️ 60

The function we passed to the Array.reduce[] method gets invoked with each element [object] in the array.

The accumulator parameter gets an initial value of 0 because that's what we supplied as the second argument to the reduce method.

We increment the accumulator by the value of the salary property for each object in the array.

The reduce method returns the sum of the salary values of all objects in the array.

An alternative and perhaps simpler approach is to use the forEach method.

To sum a property in an array of objects:

  1. Initialize a sum variable, using the let keyword and set it to 0.
  2. Call the forEach[] method to iterate over the array.
  3. On each iteration, increment the sum variable with the value of the object.

Copied!

const arr = [ {id: 1, salary: 10}, {id: 2, salary: 20}, {id: 3, salary: 30}, ]; let sum = 0; arr.forEach[element => { sum += element.salary; }]; console.log[sum]; // 👉️ 60

The function we passed to the Array.forEach method gets called with each element in the array.

Notice that we declared the sum variable using the let keyword. We can't reassign variables declared using const.

On each iteration of the loop, we increment the value stored in the sum variable to get the total amount.

This approach is more readable and intuitive, especially if you're not used to how the reduce method works.

You can also achieve the same result by using a basic for loop.

Copied!

const arr = [ {id: 1, salary: 10}, {id: 2, salary: 20}, {id: 3, salary: 30}, ]; let sum = 0; for [let index = 0; index

Chủ Đề