¿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!
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 propiedadB
es la suma de todos los valores deB
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étodoDate.prototype.getFullYear()
para obtener el año de la propiedadA
, y usar el métodoObject.prototype.hasOwnProperty()
para comprobar si el nuevo objeto ya tiene una propiedad con el mismo año. Si lo tiene, puedes agregar el valor deB
al valor existente, de lo contrario, puedes crear una nueva propiedad con el valor deB
.Aquí tienes un ejemplo de cómo podrías usar el método
Array.prototype.reduce()
para crear la nueva matriz de objetos:La variable
result
contendrá la nueva matriz de objetos con las propiedades deseadas.