检查是否在数组中找到值

时间:2014-11-11 05:16:07

标签: javascript arrays

我试图检查数组中是否包含某个数字。

我尝试过使用if (value in mines)var value = this.value; var isMine = mines.indexOf(value);

但这些都没有按预期工作。有谁能解释为什么? FIDDLE

JS

    var mines = []
while (mines.length < 9){
  var randomnumber=Math.ceil(Math.random() * 30)
  var found=false;
  for(var i=0;i<mines.length;i++){
    if(mines[i]==randomnumber){found=true;break}
  }
  if(!found)mines[mines.length]=randomnumber;
}

$(document).ready(function() {
    $(".blank").click(function() {
        var value = this.value;
        if (value in mines) { 
            $(this).removeClass("blank");
            $(this).addClass("bomb"); 
        } else {
            $(this).removeClass("blank");
            $(this).addClass("safe");
        }
    });
});

HTML

<div class="background">
<table>
    <tr>
    <td colspan="10"><div class="title">title here</div></td>
    </tr>
    <tr>
    <td colspan="10"><div class="info">text here</div></td>
    </tr>
    <tr>
        <td><button class="blank" value="1"></button></td>
        <td><button class="blank" value="2"></button></td>
        <td><button class="blank" value="3"></button></td>
    </tr>
<table>
</div>

4 个答案:

答案 0 :(得分:2)

当它是一个阵列时你应该使用indexOf,但是你有两个主要问题。

首先,类型必须匹配。数组有数字,但元素的值总是一个字符串 简单的解决方案是将值解析为整数

var value = parseInt( this.value, 10 );

其次,indexOf返回索引,它将为数组中的第一项返回0,而0是假的,因此您必须实际检查{{1} }},如果没有匹配则返回-1

indexOf

FIDDDLE

稍微简化一下你最终会

if (mines.indexOf(value) != -1) {  ...

FIDDLE

答案 1 :(得分:1)

var value = + this.value

将字符串转换为整数

答案 2 :(得分:0)

你可以这样做:

var myArray = ["one", "two", "three", "four"];
var myString = myArray.join("***") + "***";
var mySubstring = "four";
var inArray = myString.indexOf(mySubstring + "***");

if(inArray >= 0){alert("It's in array");}

答案 3 :(得分:0)

this.value返回一个字符串。试试这个。更新了fiddle

if (mines.indexOf(parseInt(value))!=-1) {  //or  if (parseInt(value) in mines) {
   $(this).removeClass("blank");
   $(this).addClass("bomb"); 
} else {           
   $(this).removeClass("blank");
   $(this).addClass("safe");
}