2011-11-22 113 views
1

比方说,我有一个对象数组,每个对象的属性之一是TheID。 事情是这样的:javasccript查找对象数组中的元素

TheArray[0].TheID = 34; 
TheArray[1].TheID = 2352; 
... 

我期待返回一个包含属性TheID我要找的数组的索引。

我有一个循环的经典:

for (i = 0; i < TheArray.length; i++) { 
    if (TheArray[i].TheID = MagicNumber) { var TheIndex = i; } 
} 
retun TheIndex; 

这工作,但它仍然必须通过整个数组循环,即使它找到TheIndex。

如何在找到TheIndex后停止循环?

谢谢。

+0

将它扔到一个函数中,然后返回该变量。它会退出循环。或者使用break。 – kevingreen

回答

3

你可以使用break离开循环:

var TheIndex; 
for (var i = 0; i < TheArray.length; i++) { 
    if (TheArray[i].TheID == MagicNumber) { 
     TheIndex = i; 
     break; 
    } 
} 
return TheIndex; 
+0

好的,很酷,谢谢我没有想到这一点。 – frenchie

0
if (TheArray[i].TheID = MagicNumber) { return i; } 
0

Break;return;一个循环内停止它,一旦你找到你在找什么。没有其他方法可以搜索特定属性值的数组/对象。你可以考虑重新考虑你的代码,以避免不必要的性能下降,但这并不总是可行的。

0

即使这是一段时间以前,如果您执行了许多此类搜索,另一个可能有用的替代方法是根据您的搜索条件循环一次索引。

例如做这一次:

var idToIdx={}; 
for (var i = 0; i < TheArray.length; i++) { 
    idToIdx['I'+TheArray[i].TheID] = i 
    } 
} 

然后只用于idToIdx['I'+ MagicNumber]多少次,根据您的需要。