Estoy creando una aplicación de prueba en React Native y quiero cambiar el orden de las preguntas cada vez que alguien elige la prueba . Estaba pensando en usar la reproducción aleatoria de lodash , pero no estoy totalmente seguro de cómo hacerlo para la matriz anidada.
const getTest = async () => { try { const response = await fetch('https://tgryl.pl/quiz/test/'.concat(route.params.testId)); const json = await response.json(); setData(json); } catch (error) { console.error(error); } } Estaba pensando en algo como setData(_.shuffle(data.tasks)) ?? No tengo ni idea
El JSON se ve así
Aparentemente, la matriz que se barajará se almacena en la propiedad de tasks del objeto de respuesta, por lo que debe barajar esa matriz y asignarla nuevamente a esa propiedad:
json.tasks = _.shuffle(json.tasks); setData(json); Aunque esto muta un objeto y luego lo pasa a setData (que presumiblemente llama a setState / useState , y tal mutación suele ser un olor a código), esto no es un problema aquí, ya que este objeto nunca antes se usó para el estado.
Sin relación, pero no llamaría a esa variable json . Es un objeto JavaScript. JSON es el término para el formato de texto que el método json() recupera de la solicitud y convierte al objeto/matriz.
Utilice un nombre que describa el contenido, como quiz .
No tiene matrices anidadas, tiene matrices dentro de un objeto. Esa es la estructura de datos de respuesta que está recibiendo.
Creo que esta es una pregunta divertida, así que aquí implementé una forma alternativa de barajar la matriz de preguntas.
Haga un bucle a través de todas las preguntas y dentro de ellas:
pop() para eliminar el último elemento de la matriz y devolverlo a la variable Qsplice() para agregar la pregunta Q al índice aleatorio generado. const arr1 = []; const arr2 = [ {question: 'asd asd 1', answer: 'bla 1', duration: 10}, {question: 'asd asd 2', answer: 'bla 2', duration: 20}, {question: 'asd asd 3', answer: 'bla 3', duration: 15}, {question: 'asd asd 4', answer: 'bla 4', duration: 30} ]; const arr3 = []; const responseObject = { arr1, arr2, arr3 }; let questions = responseObject.arr2; for(const question of questions){ let randIndex = Math.round(Math.random()*(questions.length - 1)); let Q = questions.pop(); questions.splice(randIndex, 0, Q); } console.log(questions)