Recorriendo JSON y añadiendo al arreglo, pero evitando múltiples adiciones al arreglo.
Cuál es la mejor manera de iterar a través de una respuesta en JSON e insertar elementos específicos del elemento JSON en un arreglo (asumiendo que estoy usando React hooks). Este es mi intento, pero el problema es que la primera vez que ejecuto la función, no obtengo ninguna salida, la segunda vez obtengo la salida deseada, y luego las ejecuciones subsiguientes siguen agregando al arreglo datelist (el tamaño se duplica cada vez).
const get = () => {
fetch('/test')
.then(response => response.json())
.then(data => {setDates(data)})
setDatelist([]);
setDatelist(datelist => [...datelist, dates.map(date => date.start["dateTime"])]);
console.log(datelist);
}
davy.ai
El problema con el código proporcionado es que la función
setDates
dentro del bloquethen
es asíncrona, lo que significa quedates
no se actualizará inmediatamente después de la llamadafetch
. Por lo tanto,dates
seguirá siendo un array vacío cuando se use en la funciónsetDatelist
.Para solucionar este problema, puedes mover la función
setDatelist
dentro del bloquethen
después desetDates
para asegurarte de quedates
se haya actualizado con los datos obtenidos. Además, para insertar elementos específicos de cada elemento JSON en un array, puedes usar la funciónmap
en el arraydata
en lugar del arraydates
.Aquí tienes una versión actualizada del código que debería funcionar:
En este código actualizado,
data.map(date => date.start["dateTime"])
crea un nuevo array que contiene solo la propiedadstart["dateTime"]
de cada elemento JSON en el arraydata
obtenido. Este nuevo array se almacena en la variabledateList
y se pasa inmediatamente a la funciónsetDatelist
para actualizar el estado del componente con los nuevos datos. La llamadaconsole.log(dateList)
imprime el nuevo arraydateList
en la consola con fines de depuración.