0

paso a comentar. Para una app de trivia simple necesito filtrar segun la categoria seleccionada pero no logro dar con el metodo. Por lo que veo no le estoy dando el formato correcto pero no se como hacerlo de otra forma. Me informa la consola que info no esta definida. En resumen con ajax() llamo la informacion, preguntaCategoria() es la que filtraria tal informacion y preguntaAleatoria() da un numero cualquiera para usarlo como indice del array devuelto en preguntaCategoria(), por ultimo cargarPregunta() inserta el html. Dejo funciones:

function ajax(){
    var xhr = new XMLHttpRequest();
    var datos = null;
    xhr.onreadystatechange = () => {
        if(xhr.readyState == 4 && xhr.status == 200){
           datos = JSON.parse(xhr.responseText);
        }
    }
    xhr.open("GET","base.json",false);
    xhr.send();
    return datos;
};
function preguntaCategoria(){
    const json = ajax();
    let categoria = [];
    for(let i = 0; i < json.length;i++){
        if(categoriaSeleccionada === "Todo" || categoriaSeleccionada === ""){
           return json;
        }else{
            if(json[i].categoria == categoriaSeleccionada){
                categoria.push(json[i]);
            }
        }
    }
    return categoria;
}
function preguntaAleatoria(){
    const json = ajax();
    let indice = Math.floor(Math.random()*(json.length-0)-0);
    return indice;
}
function cargarPregunta(){
    if(cantidadRespondidas < 21){
        info = preguntaCategoria()[preguntaAleatoria()];
        console.log(info);
        respuestas = [
        info.respuesta, info.incorrecta1, info.incorrecta2, info.incorrecta3
        ]
        respuestas.sort(()=>Math.random()-0.5);
        estructuraCuadro(info.categoria, info.pregunta, info.imagen, respuestas,cantidadRespondidas);
    }
}

Adjunto una parte de la bd el original tiene mas de mil objetos JSON:

[
    {
        "categoria": "Arte y literatura",
        "pregunta": "¿Quién pintó la mona lisa?",
        "respuesta": "Leonardo da Vinci",
        "incorrecta1": "Picasso",
        "incorrecta2": "Miguel Ángel",
        "incorrecta3": "Monet",
        "imagen": "https://i.ibb.co/9cjvmw1/mona-lisa.jpg",
    },
    {
        "categoria": "Historia",
        "pregunta": " ¿Quiénes fueron los sans-culottes de la Revolución Francesa?",
        "respuesta": "La Principal Masa Social Revolucionaria",
        "incorrecta1": "La Burguesía Durante La Revolución",
        "incorrecta2": "El Nombre Despectivo De Los Burgueses",
        "incorrecta3": "Ninguna Es Correcta\r"
    },
    {
        "categoria": "Deportes",
        "pregunta": "Si juegas en la NFL ¿qué deporte practicas?",
        "respuesta": "Fútbol Americano",
        "incorrecta1": "Natación",
        "incorrecta2": "Hockey",
        "incorrecta3": "Golf \r"
    },
    {
        "categoria": "Entretenimiento",
        "pregunta": " ¿Cómo se llamaba el perro de Luke Skywalker?",
        "respuesta": "No Tenía",
        "incorrecta1": "Yoda Dog",
        "incorrecta2": "Rithaaard",
        "incorrecta3": "Raikonen\r"
    }
]
fredyfx
  • 11,989
  • 10
  • 30
  • 58
  • 3
    en vez de usar *XMLHttpRequest* usa *fetch*, y para filtrar los datos creo que seria mas fácil usar el método `.filter()` – Christian Jul 02 '21 at 17:40
  • 2
    Por favor, edita la pregunta para agregar un ejemplo del JSON que recibes, como texto, para poder copiar y probar. – Triby Jul 02 '21 at 18:11
  • Listo, ya agregue la copia. Al final lo pude resolver aplicando un filter osea eliminando la funcion preguntaCategoria(). De igual forma no entiendo por que no funcionaba. – Federico Nuñez Jul 02 '21 at 19:13
  • Puedes publicar lo que hiciste como respuesta, así no queda _"huérfana"_ la pregunta y, solo como nota, el `if` debería estar antes del ciclo (o de `.filter()`), no tiene sentido recorrer si vas a devolver todo el JSON. – Triby Jul 02 '21 at 19:25
  • [JSON != Objeto Javascript](https://es.stackoverflow.com/questions/164943/cu%C3%A1l-es-la-diferencia-entre-json-y-un-objeto/) – Pablo Lozano Jul 06 '21 at 10:52

0 Answers0