Q:

Crear array de suma de elementos iguales en otro array

De una respuesta anterior obtuve el siguiente código:
var result2Graph = [];
    data2Graph.forEach(function (amountDay) {
        if (!this[amountDay.date]) {

            this[amountDay.date] = { 
                date: amountDay.date, 
                TotalAmount: 0 
            };

            result2Graph.push(this[amountDay.date]);
        };
        this[amountDay.date].TotalAmount += amountDay.amount;

    });

    console.log(result2Graph);

Intento agregar este codigo a un API para que me devuelva un valor JSON con el resultado CADA VEZ QUE SEA INVOCADA de la siguiente forma:
api.get('/dashboard/graph1', function (req, res) {

    const data2Graph = [
  { date: '06-01-2020', amount: 225 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 100 },
  { date: '06-01-2020', amount: 250 },
  { date: '06-01-2020', amount: 100 },
  { date: '06-01-2020', amount: 225 },
  { date: '06-01-2020', amount: 125 },
  { date: '06-01-2020', amount: 100 },
  { date: '07-01-2020', amount: 180 },
  { date: '07-01-2020', amount: 125 },
  { date: '07-01-2020', amount: 125 }]

    var result2Graph = [];
    data2Graph.forEach( function (amountDay) {
        if (!this[amountDay.date]) {

            this[amountDay.date] = { 
                date: amountDay.date, 
                TotalAmount: 0 
            };

            result2Graph.push(this[amountDay.date]);
        };
        this[amountDay.date].TotalAmount += amountDay.amount;

    });

    console.log(result2Graph);
    await res.json(result2Graph);

};);

El problema es que todo funciona bien la primera vez que invoco el api me da como resultado lo esperado:
[
  { date: '06-01-2020', TotalAmount: 1665 },
  { date: '07-01-2020', TotalAmount: 430 }
]

Pero la segunda vez que invoco el API me da un array en blanco []
Tengo que reiniciar el servidor express y vuelve a funcionar.
¿Me podrían ayudar encontrar una solución al problema inicial, y obtener el resultado esperado?

A:

El problema que veo es que esta usando this, cuando podrías usar directamente result2Graph.
Al estar usando continuamente this, cuando llega a la comparación dentro del bucle (está la fecha dentro de this?--> en la segunda iteración si lo está) se salta el procedimiento que has creado. Te basta con usar la variable que creas en cada llamada en vez de this:

data2Graph = [
  { date: '06-01-2020', amount: 225 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 180 },
  { date: '06-01-2020', amount: 100 },
  { date: '06-01-2020', amount: 250 },
  { date: '06-01-2020', amount: 100 },
  { date: '06-01-2020', amount: 225 },
  { date: '06-01-2020', amount: 125 },
  { date: '06-01-2020', amount: 100 },
  { date: '07-01-2020', amount: 180 },
  { date: '07-01-2020', amount: 125 },
  { date: '07-01-2020', amount: 125 }]
var result2Graph = [];
data2Graph.forEach( function (amountDay) {
    if (!result2Graph[amountDay.date]) {

        result2Graph[amountDay.date] = { 
            date: amountDay.date, 
            TotalAmount: 0 
        };
        result2Graph.push(result2Graph[amountDay.date]);
    };
    result2Graph[amountDay.date].TotalAmount += amountDay.amount;

});

console.log(result2Graph);

