问题描述
我正在尝试编写一个可以玩刽子手的机器人。 我使用了一个数组来存储所有以前的字母猜测。 如何添加到此数组中,以便在控制台中显示所有先前的猜测?
我已经尝试过在 JavaScript 中使用push()
函数,这对于第一次猜测似乎工作正常。
但是第二个猜测返回另一个数组,它只包含那个字母,而不是一个包含所有猜测的数组。
当我尝试使用correctGuessed[correctGuessed.length] = guessVal;
编写数组时,也会发生这种情况correctGuessed[correctGuessed.length] = guessVal;
我不确定我哪里出错了。
var word = "ALPHABET";
var wordLength = word.length;
var choices = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
"L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z"];
var correctGuessed = correctGuessed || [];
var guess = Math.floor(Math.random() * choices.length);
var guessVal = choices[guess].valueOf();
//Start the game with a word length and a letter guess
message.reply("I am thinking of a " + wordLength + " letter word.");
message.channel.send("My guess is " + guessVal);
//If the guess was correct
if(word.includes(guessVal))
{
//Send a congratulatory message and push the letter onto
//the end of the array so it cannot be guessed again.
message.channel.send("Your guess was correct! Guess again!");
//newCorrect = correctGuessed.push(guessVal);
correctGuessed[correctGuessed.length] = guessVal;
console.log(correctGuessed);
}
这段代码的预期结果是,如果我猜到字母 'A',控制台将显示结果 ['A']。 然后,在猜出字母“B”之后,控制台将显示结果 ['A', 'B']。
这段代码猜到'A'后的实际输出是['A'],猜到'B'后,输出的是['B']而不是['A','B']。 我在自己的数组中得到每个猜测。
问题不是我不明白push()
是如何工作的;
我明白那个
var array = [1,2,3];
array.push(4);
将产生[1,2,3,4]
,但我正在努力实现这一目标,但它不起作用。
1楼
数组的push()
函数在数组的末尾附加一个项目。
例如:
var array = [1,2,3];
array.push(4);
console.log(array)
// [1,2,3,4]
您可能多次声明数组。 如果您显示的代码在函数内部,则每次调用该函数时都会创建一个全新的数组,当您执行此操作时
var correctGuessed = correctGuessed || [];
为了解决这个问题,您可以通过在任何函数之外声明它来将正确的Guessed 声明为全局变量