我试图检查数组中是否包含某个数字。
我尝试过使用if (value in mines)
和var value = this.value; var isMine = mines.indexOf(value);
但这些都没有按预期工作。有谁能解释为什么? FIDDLE
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");
}
});
});
<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>
答案 0 :(得分:2)
当它是一个阵列时你应该使用indexOf
,但是你有两个主要问题。
首先,类型必须匹配。数组有数字,但元素的值总是一个字符串 简单的解决方案是将值解析为整数
var value = parseInt( this.value, 10 );
其次,indexOf
返回索引,它将为数组中的第一项返回0
,而0
是假的,因此您必须实际检查{{1} }},如果没有匹配则返回-1
indexOf
稍微简化一下你最终会
if (mines.indexOf(value) != -1) { ...
答案 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");
}