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.

¿Es posible filtrar un objeto anidado por el valor de alguna propiedad? (JS)

Estoy desarrollando mi propio proyecto con JS, python y datos de una API abierta. Traer los datos de la API no fue tan complicado incluso para un novato como yo. Sin embargo, tuve problemas (como siempre) al convertir los datos en información útil para mí.

Aquí está la parte con la que estoy luchando:

AA: array(60)
[
0: {A:2016-01-01, B:12}
1: {A:2016-02-01, B:122}
2: {A:2016-03-01, B:162}
3: {A:2016-04-01, B:129}
.
.
.
n:{A:20NN-NN-NN, B:923}
]

Como se puede ver, es una matriz que contiene muchos objetos. Cada objeto tiene la misma clave de propiedad A,B. A es una cadena de texto que contiene información de fecha, y B tiene algún valor numérico. Lo que quiero hacer es crear nuevos objetos que tengan información de años. En otras palabras, el objeto nuevo tendrá la misma información de mes y día, y solo el año diferirá en A. Y B sería la suma de los valores B del mismo año (lo siento por mi mala explicación, no soy bueno en inglés).

Por lo tanto, el ejemplo anterior quedaría así:

newAA: array(5)
[
0: {A:2016-01-01, B:valor numérico (suma de todos los B de 2016 en el ejemplo anterior)}
1: {A:2017-01-01, B:valor numérico (suma de todos los B de 2017 en el ejemplo anterior)}
2: {A:2018-01-01, B:valor numérico (suma de todos los B de 2018 en el ejemplo anterior)}
3: {A:2019-01-01, B:valor numérico (suma de todos los B de 2019 en el ejemplo anterior)}
4: {A:2020-01-01, B:valor numérico (suma de todos los B de 2020 en el ejemplo anterior)}
]

Honestamente, esto es bastante complicado para mí y no sé cómo manejarlo para convertirlo en lo que quiero. Si tienes una buena idea de cómo hacer esto, por favor hazmelo saber, ¡tu ayuda será apreciada!

¡Gracias por leer!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Estás intentando crear una nueva matriz de objetos a partir de una matriz existente de objetos, donde los nuevos objetos tienen el mismo mes y día en la propiedad A, pero el año es diferente y la propiedad B es la suma de todos los valores de B del mismo año en la matriz original.

    Si estás utilizando JavaScript, podrías usar el método Array.prototype.reduce() para iterar a través de la matriz original y crear un nuevo objeto con las propiedades deseadas. Podrías usar el método Date.prototype.getFullYear() para obtener el año de la propiedad A, y usar el método Object.prototype.hasOwnProperty() para comprobar si el nuevo objeto ya tiene una propiedad con el mismo año. Si lo tiene, puedes agregar el valor de B al valor existente, de lo contrario, puedes crear una nueva propiedad con el valor de B.

    Aquí tienes un ejemplo de cómo podrías usar el método Array.prototype.reduce() para crear la nueva matriz de objetos:

    const newAA = AA.reduce((acc, curr) => {
      const year = new Date(curr.A).getFullYear();
      if (acc.hasOwnProperty(year)) {
        acc[year] += curr.B;
      } else {
        acc[year] = curr.B;
      }
      return acc;
    }, {});
    
    const result = Object.keys(newAA).map(year => ({
      A: `${year}-01-01`,
      B: newAA[year]
    }));
    

    La variable result contendrá la nueva matriz de objetos con las propiedades deseadas.

Comments are closed.