Estoy tratando de verificar si las respuestas de un usuario son correctas. Las respuestas del usuario se almacenan en la variable "stad". Las opciones correctas se almacenan en la variable "collectie". Sin embargo, esta variable es una matriz con una matriz anidada. Entonces, primero recorro la "colección", verifico si el elemento de colección no es una matriz y, de lo contrario, verifico que el valor enviado esté dentro de este elemento de colección.
Si el elemento de colección es una matriz, tengo que modificar un poco la función para que la variable verifique si la respuesta está dentro de la matriz anidada.
tengo lo siguiente:
function nakijken() { var collectie = ["parijs", "8", "ijsselmeer", ["Volkswagen", "Audi", "Opel", "Porsche", "BMW", "Mercedes", "Mercedes-Benz"], ["Texel", "Vlieland", "Terschelling", "Ameland", "Schiermonnikoog"]]; var stad = []; var a = 0; stad.push(document.getElementsByTagName("input")); collectie.forEach(uitpakken); function uitpakken(antwoord) { if (!Array.isArray(antwoord)) { stad.forEach(myfunction); function myfunction(item) { if (antwoord.includes(item.value.toLowerCase())) { item.style.background = "green"; a++; } else { antwoord.style.background = "red"; } } } else{ antwoord.Foreach(uitpakken); function uitpakken(antwoord) { stad.forEach(mysecondfunction); function mysecondfunction(item) { if (antwoord.includes(item.value.toLowerCase())) { item.style.background = "green"; a++; } else { antwoord.style.background = "red"; } } } } }Sin embargo, aparece el error: item.value no está definido. Dentro de la consola, veo que el elemento es una colección de entradas y no una sola entrada.
¿Por qué esto no funciona?
El problema principal parece estar en
stad.push(document.getElementsByTagName("input")); porque eso empuja la colección de elementos devueltos a stad como una referencia única (y también una colección HTML no es una matriz real). En su lugar, puede utilizar
stad = Array.from(document.getElementsByTagName("input")); En segundo lugar, en la primera rama de la instrucción if , donde antwoord no es una matriz, ¿qué significa if (antwoord.includes(item.value.toLowerCase())) ? Probablemente desee utilizar una comparación simple como if (antwoord === item.value.toLowerCase()) .
En tercer lugar, hay un error tipográfico Foreach en lugar de forEach en un lugar.
Cuarto, ¿está seguro de que desea recorrer todos los cuadros de entrada para cada entrada en la matriz principal de respuestas correctas? ¿No corresponde cada cuadro de entrada a una pregunta específica con una respuesta correcta específica o un conjunto de respuestas correctas?
document.getElementsByTagName no devuelve una matriz, devuelve una colección HTML en vivo, que no se puede iterar con forEach, aunque puede hacer referencia a sus elementos por número de índice ( https://developer.mozilla.org/en-US/docs /Web/API/document/getElementsByTagName ).
Además, está empujando toda esta colección a la matriz stad como un elemento, por lo que ve que item es una colección de entradas: esa colección (de elementos HTML en vivo) es el único elemento en la matriz stad .
Como sugiere otra respuesta, en lugar de usar stad.push , simplemente asigne una matriz real a stad creando una matriz de la colección:
stad = Array.from(document.getElementsByTagName("input"));