Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

131
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda