Tengo este script que toma datos de un JSON con casi 100 datos, luego usa estos datos para traer el clima de una API y luego inserta estos datos en un objeto (usando un for para crear mis 100 objetos), me gustaría para agregar los objetos que tienen una temperature > 99 en una matriz y los que tienen una temperature < 99 en otra, lo intenté de esta manera pero no parece funcionar, lo siento si es un error súper tonto que no puedo ver , ¡Gracias por tu ayuda!
Este es mi guion:
async function calcWeather(){ const info = await fetch('../json/data.json') .then(function(response) { return response.json() }); for (var i in info) { const _idOficina = info[i][0].IdOficina const _nombreOficina = info[i][0].NombreOficinaSN const _zona = info[i][0].Zona const _estado = info[i][0].NombreEstado const lat = info[i][0].latjson const long = info[i][0].lonjson const base = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${long}&appid=${api_key}&units=metric&lang=sp` fetch(base) .then((responses) => { return responses.json() }) .then((data) => { // console.log(data) var myObject = { Id_Oficina: _idOficina, Latitud: data.coord.lat, Longitud: data.coord.lon, Ciudad: data.name, Estado: _estado, Zona: _zona, Nombre_Oficina: _nombreOficina, Temperatura: data.main.temp, Descripcion: data.weather[0].description }; // validation if (myObject.Temperatura < 99){ var lstValid = []; function pushValid(){ lstValid.push(myObject[i]); } pushValid(); console.log(pushValid()) } }); } };Su matriz es local, por lo que para cada objeto crea una nueva matriz lstValid sin datos anteriores. La solución es crear la matriz antes de obtener los datos o antes del bucle:
async function calcWeather(){ var lstValid = []; // HERE const info = await fetch('../json/data.json') .then(function(response) { return response.json() }); var lstValid = []; // OR HERE (ONLY ONE OF THEM) for (...) { ... }Probablemente le convenga más crear la matriz fuera de esa llamada, ya que la borra en cada ejecución. Luego simplemente agregue su objeto. Al igual que el comentario de Trincot, no estoy seguro de qué es exactamente lo que está indexando.
async function calcWeather(){ var lstValid = []; .... if (myObject.Temperatura < 99){ lstValid[someindex] = myObject; } else{ lstNotValid[someOtherIndex] = myObject; } }