Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

130
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!