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

Javascript 当单击另一个数组中的另一个单独项目,同时从第一个数组中删除该项目时,是否从一个数组中随机显示该项目?,javascript,jquery,arrays,function,for-loop,Javascript,Jquery,Arrays,Function,For Loop,我正在做我的第一个真正的项目,一个“刽子手”风格的游戏。我正在尝试执行此操作,但不确定我出错的地方:如果单击了“错误的字母”,则随机显示其中一个“身体部位”,并从数组中删除,这样它就不会重复 让错误金额=0 “字母大写字母B”、“字母大写字母B”、“字母大写字母B”、“字母大写字母C”、“字母大写字母C”、“字母大写字母D”、“字母大写字母D”、“字母大写字母字母E”、“字母大写字母字母E”、“字母大写字母F”、“字母大写字母F”、、“字母大写字母大写字母G”、“字母大写字母大写字母大写字母B

我正在做我的第一个真正的项目,一个“刽子手”风格的游戏。我正在尝试执行此操作,但不确定我出错的地方:如果单击了“错误的字母”,则随机显示其中一个“身体部位”,并从数组中删除,这样它就不会重复

让错误金额=0
“字母大写字母B”、“字母大写字母B”、“字母大写字母B”、“字母大写字母C”、“字母大写字母C”、“字母大写字母D”、“字母大写字母D”、“字母大写字母字母E”、“字母大写字母字母E”、“字母大写字母F”、“字母大写字母F”、、“字母大写字母大写字母G”、“字母大写字母大写字母大写字母B”、“字母大写字母大写字母大写字母大写字母J”、“字母大写字母大写字母大写字母大写字母大写字母K”、、“字母大写字母大写字母大写字母大写字母大写字母大写字母大写字母K”、“字母大写字母大写字母大写字母大写字母K”、、“字母大写字母大写字母大写字母大写字母大写字母大写字母大写字母大写字母K”、“字母大写字母大写字母大写字母大写”、“字母大写字母大写”、“字母大写”、“字母大写字母大写字母大写”、“字母大写字母大写字母大写”、“字母大写”、“字母大写字母大写”、“字母大写”、“字母大写字母大写字母大写”、“字母大写字母大写字母大写”、“字母字母字母#字母字母字母V“,“字母字母W”、“字母X”、“字母Y”、“字母Z”]
let bodyPartsArray=[“失去右臂”、“失去左臂”、“失去右腿”、“失去左腿”]
让correctLettersArray=[“correctLetterP”、“correctLetterI”、“correctLetterS”、“correctLetterT”、“correctLetterO”、“correctLetterL”]
函数(){
$(错误的字母数组)。在('click',函数(){
$(bodyPartsArray).show()
猜错了
})
}
//如果单击了错误的字母,则随机显示其中一个身体部位
//从列表中删除,使其无法重复

//将1添加到错误的金额
如果我理解正确,您希望从身体部位数组中拾取一个项目并将其删除,以便无法再次选择它?您可以使用该选项

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)

在上面,我们有一个数组(在本例中是身体部位数组)。然后,我们选择一个索引,它位于该数组长度内的某个位置。然后,splice从该索引处的数组中删除该项并返回它。

代码的第一个问题是它从未执行过。您需要设置代码以运行,但由于您从未在函数本身之外执行函数,因此它从未设置观察者

您可以这样做:

$(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>
不能将数组作为选择器传递给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();
});
此方法最初隐藏所有身体部位,然后设置按钮单击的观察者


解决方案:

谢谢你,这是一个巨大的不同!我将对该方法做更多的研究,再次感谢!哇!我非常感谢你,你是一位非常有意义的老师!只有一个问题……当你说,“你需要设置你的代码来运行,但是因为你永远不会在函数本身之外执行函数,这就是$(document).ready(function())正在修复的吗?是的@cameron bret,这就是我的意思。你可以在中阅读更多关于它的内容。如果你认为我的答案有帮助,请随意接受它作为最佳答案。
$(document).ready(function () {
  hideAllBodyParts();
  watchForWrongGuesses();
});