Javascript 如何使用indexOf PROPERT检查数组中是否有内容

Javascript 如何使用indexOf PROPERT检查数组中是否有内容,javascript,arrays,indexof,Javascript,Arrays,Indexof,我想在这个猜谜游戏中检查用户输入的颜色是否在数组列表中。但是当你把一种颜色放在列表中时,它总是说它不是 var guess_input; var target; var colors = ["blue", "cyan", "gold", "gray", "green", "magenta", "orange", "red", "white", "yellow" ] var finished = false; var guesses = 0; var pos; function do_ga

我想在这个猜谜游戏中检查用户输入的颜色是否在数组列表中。但是当你把一种颜色放在列表中时,它总是说它不是

var guess_input;
var target;
var colors = ["blue", "cyan", "gold", "gray", "green", "magenta", "orange",
  "red", "white", "yellow"
]
var finished = false;
var guesses = 0;
var pos;


function do_game() {
  var random_number = Math.floor(Math.random() * (colors.length - 1));
  target = colors[random_number];

  while (!finished) {
    guess_input = prompt("I am thinking of one of these colors: \n\n" + colors.join() +
      "\n\n What color am I thinking of?");
    guesses++;
    finished = check_guess();
  }
}

function check_guess() {
  if (colors.indexOf(guess_input) > -1) {
    alert(
      "This is not a color from the list ! Please pick a color from the list\n\n"
    );
    return false;
  }
}

要检查输入是否不在列表中,您需要
==-1
,而不是
-1

  if (colors.indexOf(guess_input) == -1) {
    //the element was not found

要检查输入是否不在列表中,您需要
==-1
,而不是
-1

  if (colors.indexOf(guess_input) == -1) {
    //the element was not found

您的条件是向后的:

function check_guess() {
  if (colors.indexOf(guess_input) === -1) { // -1 means not found! you have > -1 which means found!
    alert(
      "This is not a color from the list ! Please pick a color from the list\n\n"
    );
    return false;
  }
  else return true;
}

在某些情况下,您还需要返回true以避免无限循环。

您的条件是向后的:

function check_guess() {
  if (colors.indexOf(guess_input) === -1) { // -1 means not found! you have > -1 which means found!
    alert(
      "This is not a color from the list ! Please pick a color from the list\n\n"
    );
    return false;
  }
  else return true;
}

在某些情况下,您还需要返回true以避免无限循环。

您是否尝试将guess_输入打印到控制台以查看值是什么?除非这只是复制粘贴错误,否则您似乎有两个问题:右括号位于逗号分隔的数组值列表的最后一个元素下的新行上,后面没有分号。解决这两件事,我想你会没事的。我怀疑发生的情况是,由于这些语法错误,数组没有在内存中正确定义,因此以后找不到它的任何成员。将条件>更改为==为什么要使用indexOf执行此操作?这并不是检查集合成员资格的最有效方法,除非集合非常小。(其他方法,请查看)是的,@Aakash。但是,
===
==
快。您是否尝试将guess\u输入打印到控制台以查看值是什么?除非只是复制粘贴错误,否则看起来您有两个问题:右括号位于数组值逗号分隔列表的最后一个元素下的新行上,并且后面没有分号。解决这两件事,我想你会没事的。我怀疑发生的情况是,由于这些语法错误,数组没有在内存中正确定义,因此以后找不到它的任何成员。将条件>更改为==为什么要使用indexOf执行此操作?这并不是检查集合成员资格的最有效方法,除非集合非常小。(其他方法,请查看)是的,@Aakash。但是,
===
==
快,我得到了相同的答案-而且无限循环注释也非常重要!为了简洁起见,你可以省略else关键字。很好。为了最大限度地简化,我们可能会编写
函数check\u guess(){return~colors.indexOf(guess\u input)?true:alert('这不是列表中的颜色!请从列表中选择一种颜色');}
我得到了相同的答案-无限循环注释也非常重要!为了简洁起见,你可以省略else关键字。很好。为了最简洁起见,我们可以编写
函数check\u guess(){return~colors.indexOf(guess\u input)?true:alert('这不是列表中的颜色!请从列表中选择颜色\n\n');}