JavaScript检查数组中是否存在特定数字

3

我在这里搜索了很多问题,但没有找到符合我的要求的问题,如果您知道,请链接给我。

我有一个数组,我想搜索其中的特定数字,如果该数字在数组中,则我想采取一项行动,如果不在,则采取另一项行动。

我有如下代码:

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。

现在我可以理解为什么会发生这种情况,但我不知道如何检查数组是否包含特定数字。

提前感谢。


我建议你不要使用 Array 作为变量名。即使它可以正常工作(我也不确定),但这可能会导致问题。 - Joel L
我知道,实际上我不知道,我忘记写我的数组。 - Thorbjørn Reimann-Andersen
5个回答

7
你可以编写一个函数来检查元素是否属于数组:
```javascript function isInArray(element, array) { return array.indexOf(element) > -1; } ```
这个函数使用了 `indexOf` 方法来判断元素是否在数组中。如果元素在数组中,它会返回元素的索引值,否则返回 `-1`。
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()方法并使用它-如果没有-请使用上面的代码替换。


顺便说一下,请不要将变量命名为Array,因为它已保留用于实际数组类型。


谢谢Emil。听起来是个好主意,我现在正在尝试。 - Thorbjørn Reimann-Andersen
2
我可以说 - 不要修改内置对象的原型吗?只有在必要时才这样做... 关于你的问题 - 这里有一个好的、轻量级(!)库叫做underscore.js。它提供了50个有用的方法来处理数组等等。试试看吧。你可能会发现它很好用,而且可以从中学到东西 ;) http://documentcloud.github.com/underscore/ - NilColor
2
不修改内置对象将使JavaScript失去一半的目的。但可以负责任地进行修改。 - Justin Johnson


3
为什么不在找到正确的数字时中止循环呢:
for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8) {
        //change picture.src to srcpicture1
        break;
    }
}

0
你可以先对数组进行排序,然后只检查数组中存在的数字所在的位置之前的部分。

0
如果您有唯一的键并且更快的检索是您非常关心的,那么您可以考虑使用映射而不是数组(如果有一个硬绑定的情况使用数组,则当然不起作用)。如果使用映射,则只需检查“if(num in arr)”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接