Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
¿Cómo hacer que una declaración if se ejecute durante toda la ejecución del bucle For sin ir a otra declaración?

Continuación de la pregunta, parece que Mi código siempre genera la declaración else incluso cuando la declaración if es verdadera, asumí que se debe a que el ciclo for no se ejecuta por completo antes de que se le niegue que input.value no está disponible en data[i].s , por lo tanto, la salida siempre es "No entiendo", incluso cuando input.value = "hi"

¿Cómo resolver esto?

 function senda() { var input = document.querySelector('input'), send = document.createElement('p'), recv = send.cloneNode(true), data = [{ "s": "hi", "r": "hello" }, { "s": "whats up", "r": "alright" }]; send.innerText = input.value; document.body.appendChild(send); for (var i = 0; i < data.length; i++) { if (input.value == data[i].s) { recv.innerText = data[i].r; document.body.appendChild(recv); } else { recv.innerText = "I don't understand"; document.body.appendChild(recv); } } }
 <input> <button onclick="senda()">-></button>

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Su problema es que su ciclo for seguirá ejecutándose para todas las entradas en su matriz de data . Eso significa que incluso si se encuentra una coincidencia, el ciclo continúa ejecutándose, lo que hace que el texto interno se reemplace hasta el último elemento.

Hay una manera simple de hacer esto: todo lo que desea es verificar si la entrada del usuario coincide con algún valor en la clave s anidada en la matriz de objetos. Puede usar Array.prototype.findIndex para recuperar el índice que coincida con sus requisitos.

Si el índice es mayor que -1 , entonces sabrá que tiene una coincidencia. De lo contrario, puede devolver la declaración de reserva, por ejemplo:

 const foundIndex = data.findIndex(d => ds === input.value); if (foundIndex > -1) { recv.innerText = data[foundIndex].r; } else { recv.innerText = "I don't understand"; } document.body.appendChild(recv);

Para simplificar, puede condensar esto en una sola línea:

 const foundIndex = data.findIndex(d => ds === input.value); recv.innerText = foundIndex > -1 ? data[foundIndex].r : "I don't understand";

Por supuesto, esta solución solo funciona si s valores anidados son únicos en su matriz. De lo contrario, siempre obtendrá la primera instancia coincidente que ocurra.

Hay algunos consejos adicionales:

  • No use enlaces JS en línea. Use addEventListener en su lugar
  • Es posible que desee convertir input.value a minúsculas para que podamos realizar una coincidencia que no distinga entre mayúsculas y minúsculas
  • Almacene sus data fuera de la función: es una constante y no tiene que volver a declararse cada vez que se invoca la función

Vea la prueba de concepto a continuación con consejos adicionales aplicados:

 const data = [{ "s": "hi", "r": "hello" }, { "s": "whats up", "r": "alright" }]; function senda() { const input = document.querySelector('input'); const send = document.createElement('p'); const recv = send.cloneNode(true); send.innerText = input.value; document.body.appendChild(send); const foundIndex = data.findIndex(d => dstoLowerCase() === input.value.toLowerCase()); recv.innerText = foundIndex > -1 ? data[foundIndex].r : "I don't understand"; document.body.appendChild(recv); } document.querySelector('button').addEventListener('click', senda);
 <input> <button>-></button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Agregue un código de línea.

Cuando el valor de entrada es igual a data[i].s, agregue "i = data.length;"

 function senda() { var input = document.querySelector('input'), send = document.createElement('p'), recv = send.cloneNode(true), data = [{ "s": "hi", "r": "hello" }, { "s": "whats up", "r": "alright" }]; send.innerText = input.value; document.body.appendChild(send); for (var i = 0; i < data.length; i++) { if (input.value === data[i].s) { recv.innerText = data[i].r; document.body.appendChild(recv); i = data.length; } else { recv.innerText = "I don't understand"; document.body.appendChild(recv); } } }
 <input> <button onclick="senda()">-></button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su código está funcionando bien.

Pero no está funcionando como usted piensa.

los datos tienen 2 obejct : y el primer bucle

si es igual a hi e imprime hello no funciona otra declaración

y el segundo bucle no es igual a hi , por lo que esta vez funciona la else statement

por lo que debe romper si encuentra el mismo valor

como abajo

 function senda() { var input = document.querySelector('input'), send = document.createElement('p'), recv = send.cloneNode(true), data = [{ "s": "hi", "r": "hello" }, { "s": "whats up", "r": "alright" }]; send.innerText = input.value; document.body.appendChild(send); var isInputInData = false; for (var i = 0; i < data.length; i++) { if (input.value == data[i].s) { recv.innerText = data[i].r; isInputInData = true; break; } } if(!isInputInData) recv.innerText = "I don't understand"; document.body.appendChild(recv); }
 <input> <button onclick="senda()">-></button>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda