Замена значений в строке - PullRequest
0 голосов
/ 08 ноября 2018

Простите, если этот вопрос уже задавался; Я искал сайт по этому вопросу и еще не наткнулся на него.

Я создаю игру в угадывание слов, и у меня возникают проблемы с последними из моих функций. Аргументами функции являются введенный пользователем символ («символ»), случайно сгенерированное слово («слово») и шифрованная версия этого слова («scrmbldword»). Например, слово может быть «холодным», а зашифрованная версия будет иметь соответствующее количество символов подчеркивания «______». Роль этой функции состоит в том, чтобы принимать пользовательский ввод, сканировать «слово» на наличие этой буквы и, если он находит эту букву в слове, заменить знак «scrmbldword» соответствующей буквой.

Например, слово будет "холодным", а пользовательский ввод будет символом "l"; Мне нужно, чтобы scrmbldword стал "___ ll _".

function unscrambledWord(character, scrmbldword, word) {
  for (k = 0; k < word.length; k++) {
    if (character == word[k]) {
      var tempLetter = word[k];
      console.log(tempLetter)
      tempWord = scrmbldword.replace(scrmbldword[k], character);
      console.log(tempWord);
    }
  }
}

Спасибо за все ответы, но когда я копирую и вставляю их в свой код, они не работают. Я пытаюсь понять код ваших различных ответов, чтобы я мог редактировать их сам, но по большей части я не понимаю. Возможно, это помогло бы вам всем, если бы я дал больше контекста, так что вот мой файл целиком ...

<!DOCTYPE html>
<html lang="en-us">

<head>
  <meta charset="UTF-8">
  <title>Word Guess Game</title>
</head>

<body>

  <div>
    <p id="directions-text">Type any letter to start playing</p>
    <p id="userchoice-text"></p>
    <p id="userguesslist-text"></p>
    <p id="unscrambledword-text"></p>
  </div>

  <script type="text/javascript">
    var userGuesses = [];
    var unknownWord = "";

function wordGenerator() {
  var computerChoices = ["lowly", "start", "chilly", "bun", "bead", "friend", "return", "view", "cloth", "frogs", "celery", "basin", "stand", "special", "broad", "abaft", "plead", "quartz", "mark", "tempt", "shop", "stone", "scorch", "taboo", "hoax", "spiffy", "insure"];
  var cpuWord = computerChoices[Math.floor(Math.random() * computerChoices.length)];
  console.log(cpuWord);
  return cpuWord;
};
var computerWord = wordGenerator();

function scrambledWord(string) {
  var knownWord = ""
  if (string.length == 3) {
    knownWord = "___"
  } else if (string.length == 4) {
    knownWord = "____"
  } else if (string.length == 5) {
    knownWord = "_____"
  } else if (string.length == 6) {
    knownWord = "______"
  } else if (string.length == 7) {
    knownWord = "_______"
  }
  return knownWord;
}
var unknownWord = scrambledWord(computerWord);

var directionsText = document.getElementById("directions-text");
var userChoiceText = document.getElementById("userchoice-text");
var userGuessList = document.getElementById("userguesslist-text");
var unscrambledWordText = document.getElementById("unscrambledword-text");

document.onkeyup = function (event) {

  var userGuess = event.key;

  if ((userGuess === "a") || (userGuess === "b") || (userGuess === "c") || (userGuess === "d") || (userGuess === "e") || (userGuess === "f") || (userGuess === "g") || (userGuess === "h") || (userGuess === "i") || (userGuess === "j") || (userGuess === "k") || (userGuess === "l") || (userGuess === "m") || (userGuess === "n") || (userGuess === "o") || (userGuess === "p") || (userGuess === "q") || (userGuess === "r") || (userGuess === "s") || (userGuess === "t") || (userGuess === "u") || (userGuess === "v") || (userGuess === "w") || (userGuess === "x") || (userGuess === "y") || (userGuess === "z")) {
    userGuesses.push(userGuess);
    directionsText.textContent = "";

    userChoiceText.textContent = "You chose: " + userGuess;
    userGuessList.textContent = "You have guessed: " + userGuesses;
    unscrambledWordText.textContent = "The word is: " + unknownWord;
    wordChecker(userGuess)
  } else {
    alert("You did not enter an alphabetical character.")
  }
};

function wordChecker(input) {
  if (computerWord.includes(input)) {
    alert("You guessed a correct character")
    unscrambledWord(input, unknownWord, computerWord)
  } else {
    alert("You guessed an incorrect character")
  }
}

function unscrambledWord(character, scrmbldword, word) {
  for (k = 0; k < word.length; k++) {
    if (character == word[k]) {
      var tempLetter = word[k];
      console.log(tempLetter)
      tempWord = scrmbldword.replace(scrmbldword[k], character);
      console.log(tempWord);
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Я думаю, Nitish Narang действительно хороший ответ, но если вы действительно хотите использовать существующую функцию, вы можете попытаться определить и использовать функцию replaceAt, например:

function unscrambledWord(character, scrmbldword, word) {
  for (k = 0; k < word.length; k++) {
    if (character == word[k]) {
      var tempLetter = word[k];
      console.log(tempLetter)
      tempWord = scrmbldword.replaceAt(k, character);
      console.log(tempWord);
    }
  }
}

String.prototype.replaceAt=function(index, replacement) {
    return this.substr(0, index) + replacement+ this.substr(index + replacement.length);
}

unscrambledWord("l", "______", "chilly")
0 голосов
/ 08 ноября 2018

Вы можете использовать метод replace с RegExp, который имеет глобальный флаг, который говорит нам, чтобы заменить все экземпляры этого RegExp.

RegExp(`[^${character}]`, "g")

Мы создаем регулярное выражение, соответствующее любому символу, кроме предоставленного.

function unscrambledWord(character, word) {
    const notCharacter = RegExp(`[^${character}]`, "g")
    return word.replace(notCharacter, "_")
}
0 голосов
/ 08 ноября 2018

Насколько я понимаю, вы можете попробовать это

function unscrambledWord(character, word, scrmbldword = "_".repeat(word.length)) {
	return [...scrmbldword].map((d, i) => d == '_' && word[i] == character ? character : d).join('')
}

console.log(unscrambledWord('l', 'chilly'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...