当单击另一个数组中的另一个单独的项目,同时又从第一个数组中删除该项目时,从一个数组中随机显示项目?

时间:2018-12-17 01:12:24

标签: javascript jquery arrays function for-loop

我正在从事我的第一个实际项目,即“ Hangman”风格的游戏。我正在尝试执行此操作,但不确定我要去哪里:如果单击了“错误的字母”,请随机显示“身体部位”之一并从数组中删除,以使其无法重复。 / p>

let wrongAmount = 0
let wrongLettersArray = ["#alphabetLetterA", "#alphabetLetterB", "#alphabetLetterC", "#alphabetLetterD", "#alphabetLetterE", "#alphabetLetterF", "#alphabetLetterG", "#alphabetLetterH", "#alphabetLetterJ", "#alphabetLetterK", "#alphabetLetterM", "#alphabetLetterN", "#alphabetLetterQ", "#alphabetLetterR", "#alphabetLetterU", "#alphabetLetterV", "#alphabetLetterW", "#alphabetLetterX", "#alphabetLetterY", "#alphabetLetterZ"]
let bodyPartsArray = ["#losingTorso", "#losingRightArm", "#losingLeftArm", "#losingRightLeg", "#losingLeftLeg"]
let correctLettersArray = ["#correctLetterP", "#correctLetterI", "#correctLetterS", "#correctLetterT", "#correctLetterO", "#correctLetterL"]

function wrongGuess() {
    $(wrongLettersArray).on('click', function () {
        $(bodyPartsArray).show()
        wrongGuess()
    })
}

//if a wrong letter is clicked show one of the body parts at random
//remove from list so it cannot repeat
//add 1 to the wrong amount

2 个答案:

答案 0 :(得分:2)

如果我的理解正确,您想从身体部位阵列中选择一个项目并将其删除,以便无法再次选择它?您可以为此使用splice()

const ar = [0, 1, 2, 3, 4, 5, 6]
const idx = Math.floor(Math.random() * ar.length)
const item = ar.splice(idx, 1)

console.log(item, ar)

在上面,我们有一个数组(在这种情况下,这就是您的身体部位数组)。然后,我们选择一个索引,该索引在该数组的长度内。然后,拼接从该索引处的数组中删除该项目并返回它。

答案 1 :(得分:1)

您的代码的第一个问题是它永远不会被执行。您需要设置代码以运行,但是由于您永远不会在函数本身之外执行该函数,因此它也不会设置观察程序。

您可以这样做:

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

不幸的是,您编写的代码不能正确执行您需要执行的操作,因此,我为您提供了以下解决方案。

首先,我建立了一些基本的HTML来说明坏字母:

<h2>wrong</h2>
<button id="a">A</button>
<button id="b">B</button>

<h2>correct</h2>
<button id="p">P</button>
<button id="s">S</button>

<hr>

<h1 id="torso">torso</h1>
<h1 id="right-arm">right arm</h1>

<hr>

wrong count: <span id="wrong">0</span>

然后,我设置了一个函数以初始隐藏所有身体部位:

function hideAllBodyParts() {
  var bodyPartsSelector = bodyPartsArray.join(', ');

  $(bodyPartsSelector).hide();
}

您不能将数组作为选择器传递给jQuery,它必须是字符串,即'#a, #b'而不是['#a', '#b']

然后您的主要功能一次显示一个身体部位并增加错误的计数:

function watchForWrongGuesses() {
  // Your selector needs to be a string, e.g. '#a, #b' not an array ['#a', '#b']
  var wrongLettersSelectors = wrongLettersArray.join(', ');

    $(wrongLettersSelectors).on('click', function () {
      // Choose one body part and show it
      var bodyPart = bodyPartsArray.pop();
      $(bodyPart).show();

      // Increment wrong count
      wrongAmount++;
      $('#wrong').text(wrongAmount);
    });
}

然后,最后但最重要的部分是在文档加载时将其链接起来:

$(document).ready(function () {
  hideAllBodyParts();
  watchForWrongGuesses();
});

此方法首先隐藏所有身体部位,然后为按钮单击设置观察器。

解决方案:https://codepen.io/tinacious/pen/xmOgJj