首页 文章

在某些索引(或索引)javascript处插入值

提问于
浏览
0

我在完成任务时遇到了障碍 . 如何将值插入给定的索引?

例如,我正在制作一个刽子手游戏 . 如果单词是“harry”,并且玩家猜测字母“r”,我如何将我的下划线数组变为“_ _ r r _”?

我在下面从单独的js文件中获取一个单词,创建一个下划线数组(返回单词的每个字母一个),然后,当用户猜出一个字母时,它会找到该字母出现的索引或索引 . 信件 .

**我已经更新了以下代码 . 朝向结尾的for循环使用我的下划线数组(wordToGuess [])和用户输入中的拼接 . 这就是我需要它,但它也把最后一个猜测的字母放在前面 . 例如,如果单词是“粗体”并且用户猜到的最后一个字母是“l”,则wordToGuess数组将是lbold . 有谁知道这是为什么?我确信它很容易让我忽略,但它让我疯狂 .

使用Javascript

var word;

$(document).ready(function () {
    SetGameBoard();
});

//When guess button is clicked
$('#BtnGuess').click(function () {
    CheckGuess();
});

function GetPhrase() {
    word = ReturnWord();
    alert(word);
}

function SetGameBoard() {
    GetPhrase();
    wordToGuess = new Array(word.length);

     // Place underscore for each letter in the answer word in the DivWord div
    for (var i = 0; i < word.length; i++){
       wordToGuess[i] = "_ ";
     }
    $('#DivWord').html(wordToGuess);
}


function CheckGuess() {
    var pos = 0;
    var posArray = [];
    var guessLetter = $('#tbGuessLetter').val();

    while ((pos = word.indexOf(guessLetter, pos)) > -1) {
        posArray.push(++pos);
    }

    if (posArray.length == 0) {
        alert(guessLetter + " is not in the word.");
    }

    //Splice in correct letters. Not working 100%
    for(i=0; i < wordToGuess.length; i++){
        wordToGuess.splice(posArray[i], 1, guessLetter);
        }
        $('#DivWord').html(wordToGuess);

    alert(posArray);

    alert(guessLetter);
}

4 回答

  • -1

    要修改数组,你想要 Array.prototype.splice()

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

    来自文档:

    var myFish = ['angel', 'clown', 'mandarin', 'surgeon'];
    
    // removes 0 elements from index 2, and inserts 'drum'
    var removed = myFish.splice(2, 0, 'drum');
    // myFish is ['angel', 'clown', 'drum', 'mandarin', 'surgeon']
    // removed is [], no elements removed
    
    // removes 1 element from index 3
    removed = myFish.splice(3, 1);
    // myFish is ['angel', 'clown', 'drum', 'surgeon']
    // removed is ['mandarin']
    
    // removes 1 element from index 2, and inserts 'trumpet'
    removed = myFish.splice(2, 1, 'trumpet');
    // myFish is ['angel', 'clown', 'trumpet', 'surgeon']
    // removed is ['drum']
    
    // removes 2 elements from index 0, and inserts 'parrot', 'anemone' and 'blue'
    removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
    // myFish is ['parrot', 'anemone', 'blue', 'trumpet', 'surgeon']
    // removed is ['angel', 'clown']
    
    // removes 2 elements from index 3
    removed = myFish.splice(3, Number.MAX_VALUE);
    // myFish is ['parrot', 'anemone', 'blue']
    // removed is ['trumpet', 'surgeon']
    

    看起来你想要的行为就在这里的第三个例子中,他们将'drum'替换为'trumpet' .

  • 0

    尝试这样的事情:

    var word=["_","_","
    _"];
    word[1]="r";
    

    现在你的阵列变成1,

  • 0

    编辑,更新

    尝试

    var word = "word" // `word` : input `String`
        , _word = word.split("")
        , mask = word.replace(/./g, "_")
        , _mask = mask.split("")
        , temp = ""
        , guess = function (letter) {
             _mask[
                 $.inArray(
                     letter
                     , _word
                     , temp.match(letter) !== null 
                       ? temp.lastIndexOf(letter) + 1 
                       : 0
                 )
             ] = letter;
             temp = _mask.join("");
             return temp.indexOf("_") !== -1 ? temp : word
         };
    
     $("input").on("input", function (e) {
         $("#results").text(guess(e.target.value));
         e.target.value = "";
     });
    
    var word = "word" // `word` : `String`
        , _word = word.split("")
        , mask = word.replace(/./g, "_")
        , _mask = mask.split("")
        , temp = ""
        , guess = function (letter) {
             _mask[
                 $.inArray(
                     letter
                     , _word
                     , temp.match(letter) !== null 
                       ? temp.lastIndexOf(letter) + 1 
                       : 0
                 )
             ] = letter;
             temp = _mask.join("");
             return temp.indexOf("_") !== -1 ? temp : word + " !"
         };
    
     $("input").on("input", function (e) {
         $("#results").text(guess(e.target.value));
         e.target.value = "";
     })
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <input type="text" />
    <div id="results"></div>
    
  • 2

    做点什么

    string replaceAt = function(str, index, character) {
        return str.substr(0, index) + character + str.substr(index+character.length);
    }
    
    hangmanString = replaceAt(hangmanString, 3, 'r');
    

    被无耻地从here.偷走

相关问题