2009-11-25 74 views
3

我在这里搜索了很多问题,但没有找到一个我认为适合我的账单的,所以如果你知道一个请链接到它。Javascript正在检查数组是否存在特定的数字

我有一个数组,我想要搜索一个特定的数字,如果这个数字是在数组中,然后我想采取一个行动,如果不是,那么另一个行动。

我有这样的事情

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 
} 

但这将运行阵列的lenght并最终检查数组的最后一个元素,并自最后一个元素是不是8,然后它会改变图片图片2。

现在我可以看到为什么发生这种情况,我只是没有任何想法如何去检查数组是否包含特定的数字。

在此先感谢。

+0

我建议你不要使用Array作为变量名。即使它有效(我不确定),它可能会导致问题。 – 2009-11-25 09:50:05

+0

我知道,我实际上没有,我忘了写myArray – 2009-11-25 09:54:36

回答

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作为变量名称,因为它是为实际数组类型保留的。

+0

谢谢埃米尔。这听起来像一个好主意,即时尝试,如果现在 – 2009-11-25 09:52:40

+7

应该检测indexOf方法,并使用它,如果它可用... – James 2009-11-25 09:55:47

+2

我可以说 - 不要修改buidl在对象的原型?只有当你必须... 关于你的问题 - 这里有一个很好的,轻的(!)库,名为underscore.js。 50个有用的方法来处理数组等。试试吧。你可以很好的与AND一起学习;) http://documentcloud.github.com/underscore/ – NilColor 2009-11-25 09:58:31

3

为什么不只是你中止循环,当你找到合适的号码:

for(x=0;x<=Array.length;x++) 
{ 
    if(Array[x]==8) { 
     //change picture.src to srcpicture1 
     break; 
    } 
} 
+0

这就是我需要的,谢谢! – eshellborn 2013-07-23 21:42:28

0

您可以在阵列的第一排序,然后检查数组最多只在其中一个号码将在该点数组,它是否存在。

0

如果你有独特的按键和更快的检索是你所关心的很多东西,你可以考虑使用的地图,而不是的数组(如果存在使用数组的困难情况,那么它当然不会工作)。如果使用地图,您只需选中“if(num in arr)”。

相关问题