2010-04-25 2 views
0

Consultez le code suivant:Comment mieux itérer sur un tableau énorme avec beaucoup d'éléments non définis

var _test1 = []; 
_test1[88] = 'sex'; 
_test1[1999990] = 'hey'; 
for(i = 0, length = _test1.length; i < length; i++){ 
    if(_test1[i] == 'hey'){ 
     alert(_test1.length); 
    } 
} 

cela prend beaucoup de temps, et il n'y a que deux valeurs. Y a-t-il un moyen d'être plus rapide? Même en utilisant un autre système qui indexe les objets par un numéro puis les boucle rapidement?

Répondre

1

Avez-vous essayé d'utiliser un objet à la place? Les nombres doivent être convertis automatiquement en chaînes. Vous traverseriez la liste avec une boucle for ... in.

+0

Vous n'avez pas besoin de passer à un objet. – SLaks

+0

oui. Je pense que c'est la meilleure option. sont des objets beaucoup plus lourds que le tableau? –

+0

Les tableaux sont des objets. – SLaks

3

Vous pouvez utiliser un for/boucle in:

for (var i in _test1) { 
    if (!_test1.hasOwnProperty(i) || isNaN(+i)) continue; 

    if(_test1[i] == 'hey'){ 
     alert(_test1.length); 
    } 
} 

C'est exactement ce que vous cherchez; il ne fera que boucler sur les indices qui sont réellement définis, et passera tous les trous dans le tableau.

+0

merci pour cette solution, je ferai référence plus tard: D –

Questions connexes