es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo fusionar una matriz de objetos con una clave única?

Tengo el siguiente array de objetos. Quiero fusionar estos objetos con el mes como identificador único.

[
  { month: 7, openSlot: 9, confirmed: 0, requested: 0, total: 0 },
  { month: 5, openSlot: 0, confirmed: 6, requested: 0, total: 0 },
  { month: 7, openSlot: 0, confirmed: 0, requested: 0, total: 17 }
]

El arreglo anterior debe fusionarse así:

{ month: 7, openSlot: 9, confirmed: 0, requested: 0, total: 17 },
{ month: 5, openSlot: 0, confirmed: 6, requested: 0, total: 0 }

Necesito combinar todos los datos para cada mes único. Por ejemplo, en el mes 7, necesito realizar una operación de suma en openSlot, confirmed, requested, total.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para combinar los objetos en el arreglo con el mes como identificador único, podemos usar el método reduce(). Así es cómo:

    let data = [
      { month: 7, openSlot: 9, confirmed: 0, requested: 0, total: 0 },
      { month: 5, openSlot: 0, confirmed: 6, requested: 0, total: 0 },
      { month: 7, openSlot: 0, confirmed: 0, requested: 0, total: 17 }
    ];
    
    let mergedData = data.reduce((acc, currentValue) => {
      let existingValue = acc.find(item => item.month === currentValue.month);
      if(existingValue) {
        existingValue.openSlot += currentValue.openSlot;
        existingValue.confirmed += currentValue.confirmed;
        existingValue.requested += currentValue.requested;
        existingValue.total += currentValue.total;
      } else {
        acc.push(currentValue);
      }
      return acc;
    }, []);
    
    console.log(mergedData);
    

    En el código anterior, primero inicializamos un arreglo vacío mergedData para almacenar nuestros datos combinados. Luego, usamos el método reduce() para recorrer cada objeto en el arreglo data.

    Por cada objeto, verificamos si ya existe un objeto en el arreglo mergedData con el mismo valor de mes. Si es así, simplemente sumamos las propiedades correspondientes. Si no, empujamos el objeto al arreglo mergedData.

    Finalmente, registramos el arreglo mergedData en la consola.

    La salida del código anterior será:

    [
      { month: 7, openSlot: 9, confirmed: 0, requested: 0, total: 17 },
      { month: 5, openSlot: 0, confirmed: 6, requested: 0, total: 0 }
    ]
    

    Como puedes ver, los objetos en el arreglo se han combinado según el valor único del mes, y se han sumado las propiedades correspondientes.

Comments are closed.