Tengo algunos datos JSON en este formato.
"Sensor": "14829304", "DATA": { "Rainfall": { "2022-01-11": { "T1": { "MM": "3.94", "CONFIRMED": "T" }, "T2": { "MM": "3.91", "CONFIRMED": "T" } } }, "Temperature": { "2022-01-11": { "T1": { "MM": "9.32", "CONFIRMED": "T" }, "T2": { "MM": "9.44", "CONFIRMED": "T" } }Lo que estoy tratando de lograr es resumir todos los MM de lluvia agrupados por fecha. El problema es que mi intento no repite todas las fechas una vez, sino cuántos días hay.
mi intento es
let groupedDay = {}; const dailyRainfall = Object.entries(weatherdata.DATA.Rainfall).forEach(([day, times]) => { if (groupedDay[day] == null) groupedDay[day] = 0 Object.values(times).forEach(data => { if (data.MM != null) groupedDay[day] += parseFloat(data.MM) }) //console.log(groupedDay) return groupedDay }) console.log(dailyRainfall)El otro problema que tengo es que la función devuelve indefinido, pero puedo consolar el registro del día agrupado dentro de la función. Quiero que vuelva:
{ '2022-01-11': xxxx, '2022-01-12': yyyy, '2022-01-13': zzzz }Cualquier sugerencia será recibida con gratitud.
Simplemente use groupedDay después de que haya terminado con los datos, forEach no tiene un valor de retorno, siempre será indefinido
const data = {"Sensor": "14829304","DATA": {"Rainfall": { "2022-01-11": {"T1": {"MM": "1","CONFIRMED": "T"},"T2": {"MM": "1","CONFIRMED": "T"}}, "2022-01-12": {"T1": {"MM": "2","CONFIRMED": "T"},"T2": {"MM": "2","CONFIRMED": "T"}}, "2022-01-13": {"T1": {"MM": "3","CONFIRMED": "T"},"T2": {"MM": "3","CONFIRMED": "T"}}}, "Temperature": {"2022-01-11": {"T1": {"MM": "9.32","CONFIRMED": "T"},"T2": {"MM": "9.44","CONFIRMED": "T"}}}}} let groupedDay = {}; Object.entries(data.DATA.Rainfall).forEach(([day, times]) => { if (groupedDay[day] == null) groupedDay[day] = 0 Object.values(times).forEach(data => { if (data.MM != null) groupedDay[day] += parseFloat(data.MM) }) }) console.log(groupedDay)El problema es que forEach devuelve indefinido, incluso si la función de devolución de llamada devuelve algo. La forma correcta no es console.log(dailyRainfall) sino console.log(groupedDay) .