【问题标题】:insert values at certain index (or indices) javascript在某个索引(或索引)处插入值 javascript
【发布时间】:2014-12-05 19:11:01
【问题描述】:

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

例如,我正在开发一个刽子手游戏。如果单词是“harry”,并且玩家猜到了字母“r”,我如何将我的下划线数组转换为“_ _ r r _”?

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

**我已经更新了下面的代码。最后的 for 循环是我的下划线数组(wordToGuess[])和用户输入的拼接。这可以满足我的需要,但它也将最后猜到的字母放在前面。例如,如果单词是“bold”并且用户猜到的最后一个字母是“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);
}

【问题讨论】:

  • “ReturnWord()”设置在哪里?
  • @Growler 它位于一个单独的文件中,它只是一个单词数组和一个“随机”选择一个单词并返回它的函数。
  • @exeleon "如果单词是"harry",并且玩家猜到了字母"r",我如何将我的下划线数组变成" i> _ r r "?"" 如果一个 (one) r 被猜对了,两个 r's 被显示出来在蒙面词?

标签: javascript jquery arrays


【解决方案1】:

试试这样的:

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

现在你的数组变成了 ,1,

【讨论】:

  • 据我所知,索引和索引都是正确的。
  • 对不起我的错误
【解决方案2】:

要就地修改数组,您需要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']

看起来您想要的行为在第三个示例中,他们将“鼓”替换为“小号”。

【讨论】:

    【解决方案3】:

    编辑、更新

    试试

    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>

    【讨论】:

      【解决方案4】:

      做一些类似的事情

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

      无耻地盗取here.

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2011-04-04
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      相关资源
      最近更新 更多