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,因此它将图片更改为图片 2。

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

提前致谢。

4

5 回答 5

7

你可以做的是给自己写一个函数来检查一个元素是否属于一个数组:

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()数组上的方法并使用它 - 如果没有 - 将其替换为上面的代码。


PS 尽量不要Array用于变量名,因为它是为实际数组类型保留的。

于 2009-11-25T09:47:21.483 回答
3

当你找到正确的数字时,为什么不中止循环:

for(x=0;x<=Array.length;x++)
{
    if(Array[x]==8) {
        //change picture.src to srcpicture1
        break;
    }
}
于 2009-11-25T09:43:38.147 回答
0

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

于 2009-11-25T10:16:07.107 回答
0

您可以先对数组进行排序,然后仅检查数组直到数组中存在数字的点,如果它存在的话。

于 2009-11-25T09:44:55.617 回答