Filtrar array y agregar una propiedad

Tengo un array listadoAvances donde se encuentran los avances de varios proyectos por periodo.

El periodo vigente: 06/21/2018 o en segundos 1529539200, tiene información de los 3 proyectos: proyecto 20, 21 y 22.

En el otro periodo: 06/14/2018, una semana antes exactamente, solo hay información de dos proyectos el 20 y 21. Porque el 22 aun no existía.

  listadoAvances = [
    // periodo vigente 06/21/2018
    {
      proyecto: 20, 
      timestamp: 1529539200, // segundos
      vigente: true,
      avance: 90
    },
    {
      proyecto: 21, 
      timestamp: 1529539200,
      vigente: true,
      avance: 70
    },
    {
      proyecto: 22,
      timestamp: 1529539200,
      vigente: true,
      avance: 100
    },
    // periodo 06/14/2018
    {
      proyecto: 20, 
      timestamp: 1528934400, // 1 semana antes de vigente (1529539200 - 604800)
      vigente: false,
      avance: 80
    },
    {
      proyecto: 21, 
      timestamp: 1528934400,
      vigente: false,
      avance: 50
    }  
  ]

Lo que necesito es obtener un listado de solo los proyectos vigentes, pero que incluya una nueva propiedad incremento, que es igual a la diferencia entre el avance vigente y el de la semana anterior del proyecto correspondiente.

Por ejemplo:

  listadoAvancesVigente = [
    {
      proyecto: 20, 
      timestamp: 1529539200,
      vigente: true,
      avance: 90,
      incremento: 10 // diferencia entre avance vigente y el de la semana anterior
    },
    {
      proyecto: 21, 
      timestamp: 1529539200,
      vigente: true,
      avance: 70,
      incremento: 20
    },
    {
      proyecto: 22,
      timestamp: 1529539200,
      vigente: true,
      avance: 100,
      incremento: 0 // no existia en la semana anterior, de forma que no hubo incremento.
    }
  ]

Filtrar los proyectos vigente me parece sencillo,

  listadoAvances.filter(p => {
    return p.vigente === true
  })

Sin embargo, no tengo claro como podría agregar la propiedad incremento de acuerdo a mi requerimiento.

Agradezco su colaboración

Leave a Reply

Your email address will not be published. Required fields are marked *