2013-05-27 52 views
0

假设我有一个全局对象,看起来像这样:最快的方式

var TheFruits = { 

    323: {}, 
    463: {}, 
    223: {} ..... // can be thousands of properties 
} 

基本上,键ID和值本身是对象。现在假设我有一个传递给函数的ID数组,并且我希望该函数返回一个引用数组,以匹配全局对象的ID(即没有深度副本)的值。事情是这样的:

function GetReferences(TheArrayOfIDs) { 

    var TheArrayOfReferences = []; 

    return TheArrayOfReferences; 
} 

现在我知道我可以写一个for循环,在TheArrayOfIDs迭代,并且然后遍历在每次迭代的对象键,但那么这是一个循环内的循环。所以我正在寻找这样做的最快方法,并且jquery可用。

基本上,如果TheArrayOfIDs = [323, 463, 223];然后TheArrayOfReferences =[TheFruit.323, TheFruit.463, TheFruit.223];

感谢。

回答

2

你并不需要第二个循环:

var results = []; 
for (var i = 0; i < ids.length; i++) 
    results.push(fruits[ids[i]]); 
+0

好的,谢谢你的回答;不需要第二个循环,upvoted和接受是因为原生javascript。 – frenchie

2

你所要做的只有一个关键的查找是内置的循环:

var TheArrayOfReferences = TheArrayOfIDs.map(function(id){return TheFruits[id]}); 
+0

好的,谢谢你的回答;不需要第二个循环。 Upvoted:我也爱jquery。 – frenchie

+1

请注意,我不使用jQuery。这是纯粹的原生JavaScript。 JavaScript太棒了。 –

+0

啊我明白了:SLaks的答案中有什么不同? – frenchie

1

类似的东西应该工作:

var i = 0, l = TheArrayOfIDs.length; 
for (i = 0; i < l; i++) 
    TheArrayOfReferences.push(TheFruits[TheArrayOfIDs[i]]); 
+1

它应该是'.push(TheFruits [ TheArrayOfIds [i]])' – 2013-05-27 14:46:16

+0

@squint True,编辑。 – blue112

+0

Upvoted,你很近。 – frenchie