我在这里搜索了很多问题,但没有找到一个我认为适合我的账单,所以如果你知道一个,请链接到它。
我有一个数组,我想搜索一个特定的数字,如果该数字在数组中,我想采取行动,如果没有,那么另一个行动。
我有类似的东西
var Array = ["1","8","17","14","11","20","2","6"];
for(x=0;x<=Array.length;x++)
{
if(Array[x]==8)
then change picture.src to srcpicture1
else
then change picture.src to srcpicture2
}
但这会运行数组的长度并最终检查数组的最后一个元素,因为最后一个元素不是8,所以它会将图片更改为picture2。
现在我可以看到为什么会发生这种情况,我对如何检查数组是否包含特定数字没有任何想法。
提前致谢。
答案 0 :(得分:8)
你能做的就是给自己写一个函数来检查一个元素是否属于一个数组:
function inArray(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) return true;
}
return false;
}
刚才:
var arr = ["1","8","17","14","11","20","2","6"];
if (inArray(arr, 8)) {
// change picture.src to srcpicture1
} else {
// change picture.src to srcpicture2
}
这对我来说更具可读性。
对于额外的点,您可以将函数添加到数组原型中,如下所示:
Array.prototype.has = function (value) {
for (var i = 0; i < this.length; i++) {
if (this[i] === value) return true;
}
return false;
};
然后呼叫将是
if (arr.has(8)) // ...
进一步推动这一点,你可以检查数组上的indexOf()
方法并使用它 - 如果没有 - 用上面的代码替换它。
P.S。尽量不要将Array
用于变量名,因为它是为实际的数组类型保留的。
答案 1 :(得分:6)
使用此
http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf
即版本
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/IndexOf#Compatibility
答案 2 :(得分:3)
为什么不在您找到正确的号码时中止循环:
for(x=0;x<=Array.length;x++)
{
if(Array[x]==8) {
//change picture.src to srcpicture1
break;
}
}
答案 3 :(得分:0)
您可以先对数组进行排序,然后只检查数组,直到数组在数组中的位置,是否存在。
答案 4 :(得分:0)
如果你有独特的键并且更快的检索是你非常关心的,你可以考虑使用一个地图而不是一个数组(如果有一个使用数组的硬边案例,那么它将不起作用课程)。如果使用地图,只需选中“if(num in arr)”。