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

126
Vistas
Reemplace el valor duplicado en una matriz en JavaScript
let lettersOfTheWord =["W",'H','A','T','E','V','E','R']; let guessedLetters = lettersOfTheWord.map(()=>'_'); var count=0; function guessLetter(letter){ for(let i=0; i<lettersOfTheWord.length;i++){ if (letter===lettersOfTheWord[i] && guessedLetters[i]==='_'){ guessedLetters[i]=letter; console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter."); count++; console.log(count); } if (letter!==lettersOfTheWord[i] && guessedLetters[i]!=='_'){ console.log("wrong letter"); } } if (count===lettersOfTheWord.length){ console.log("you win"); } } guessLetter("W"); guessLetter("H"); guessLetter("A"); guessLetter("T"); guessLetter("E"); guessLetter("H"); guessLetter("E"); guessLetter("R");

Así que he cambiado mi código ahora. El nuevo problema es ¿qué pasa si me gustaría imprimir la información de la "letra incorrecta" si la función de llamada tiene un argumento incorrecto?


 let lettersOfTheWord =['F','O','X',"X"]; let guessedLetters = []; let generateUnderScore = function(word){ for (let i =0; i<word.length; i++){ guessedLetters.push("_"); } //console.log(guessedLetters.toString()); return guessedLetters; } //to generate underscore. generateUnderScore(lettersOfTheWord); let guessLetter =function(letter){ for (let i=0; i<lettersOfTheWord.length;i++){ if (letter===lettersOfTheWord[i]){ let index=lettersOfTheWord.indexOf(letter); guessedLetters[index]=letter; console.log(guessedLetters); } } console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter.") } guessLetter("F"); guessLetter("O"); guessLetter("X"); guessLetter("X");

Así es como se ve mi código, para la última llamada de función guessLetter("X") , me gustaría que el resultado fuera algo como:

 You entered:X The current guessed letters: F,O,X,X Congratulations! You found a new letter.

Sin embargo, termina con:

 You entered:X The current guessed letters: F,O,X,_ Congratulations! You found a new letter.

Noté que el duplicado de la letra "X" no se reemplazó, pero ¿cómo soluciono este problema? ¡Muchas gracias!

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

0

Simplifiqué un poco tu código.

 const UNKNOWN_LETTER = '_'; let lettersOfTheWord =['F','O','X',"X"]; let guessedLetters = lettersOfTheWord.map(() => UNKNOWN_LETTER); function guessLetter(letter){ lettersOfTheWord.forEach((_letter,i)=>{ if (letter===_letter && guessedLetters[i] === UNKNOWN_LETTER) { guessedLetters[i]=letter; console.log(guessedLetters); console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter.") } }); } guessLetter("F"); guessLetter("O"); guessLetter("X"); guessLetter("X");

El problema estaba en if debía agregar && guessedLetters[i]==='_' a su código. Y elimine let index=lettersOfTheWord.indexOf(letter); luego reemplace i en lugar de index

Además, puede usar el bucle for ... in . Para usar el descanso y omitir controles innecesarios

 const UNKNOWN_LETTER = '_'; let lettersOfTheWord =['F','O','X',"X"]; let guessedLetters = lettersOfTheWord.map(() => UNKNOWN_LETTER); function guessLetter(letter){ for(const i in lettersOfTheWord){ if (letter===lettersOfTheWord[i] && guessedLetters[i]===UNKNOWN_LETTER) { guessedLetters[i]=letter; console.log(guessedLetters); console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter."); break; } } } guessLetter("F"); guessLetter("O"); guessLetter("X"); guessLetter("X");

PUNTAS:

  • puede eliminar la función generateUnderScore
  • Obtenga más información sobre el mapa ES6 y forEach
  • no necesita proporcionar función a su let . Simplemente cree el function name(..) {...} Creo que esto es más fácil de borrar
about 4 years ago · Juan Pablo Isaza Denunciar

0

Tu problema:

Cuando intenta encontrar el índice de "X" de las letras de la lettersOfTheWord , siempre devolverá 2 , que es la primera aparición de "X" en lettersOfTheWord de la palabra.

Solucione su problema.

Array.prototype.indexOf() acepta fromIndex como un parámetro opcional. Puede usar el índice de la ejecución como fromIndex .

Tu violín fijo

 let lettersOfTheWord = ['F', 'O', 'X', "X"]; let guessedLetters = []; let executionIndex = 0; let generateUnderScore = function (word) { for (let i = 0; i < word.length; i++) { guessedLetters.push("_"); } //console.log(guessedLetters.toString()); return guessedLetters; } //to generate underscore. generateUnderScore(lettersOfTheWord); let guessLetter = function (letter) { for (let i = 0; i < lettersOfTheWord.length; i++) { if (letter === lettersOfTheWord[i]) { let index = lettersOfTheWord.indexOf(letter, executionIndex); guessedLetters[index] = letter; // console.log(guessedLetters); } } console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter."); executionIndex++; } guessLetter("F"); guessLetter("O"); guessLetter("X"); guessLetter("X");

Mejor solución

Puedes reescribir letras Array.map guessedLetters Para loop isirrelavent, puede usar Array.indexOf en sí mismo y puede verificar si el índice encontrado es mayor que -1, lo que significa que el elemento existe en la matriz.

violín de trabajo

 let lettersOfTheWord = ['F', 'O', 'X', "X"]; let guessedLetters = lettersOfTheWord.map(item => '_'); let executionIndex = 0; let guessLetter = function (letter) { const index = lettersOfTheWord.indexOf(letter, executionIndex); index > -1 ? guessedLetters[index] = letter : {}; console.log("You entered:" + letter); console.log(`The current guessed letters: ${guessedLetters.toString()}`); console.log("Congradulations! You found a new letter."); executionIndex++; } guessLetter("F"); guessLetter("O"); guessLetter("X"); guessLetter("X");

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