2010-06-22 7 views
2

Je tente d'attraper le dernier cas dans une boucle forEach, mais tous les cas semblent évaluer false au lieu que le dernier soit vrai. Mon code:Javascript Si déclaration n'évaluant pas vrai

for(var i in networks){ 
    if (i == (networks.length - 1)){ 
     //do stuff 
    } 
} 

Qu'est-ce qui ne va pas?

+0

Est-ce votre index numérique (0, 1, 2, etc.) ou est-ce quelque chose d'autre comme "bob", "chat", "chien", "foo"? – HoLyVieR

+0

Mon index est numérique, quand j'imprime i il va de 0 à (n - 1) –

Répondre

4

Essayez ceci:

for(var i = 0, j = networks.length; i < j; i++){ 
    if (i == (j - 1)){ 
     //do stuff 
    } 
} 

Je méprisent personnellement la boucle for...in en JavaScript parce qu'il apporte dans l'image d'un tas de propriétés indésirables, il est peu fiable - a besoin d'une tonne de santé mentale vérifie que la propriété actuelle n'est pas d'un type non désiré ou indéfini. Je peux continuer encore et encore à ce sujet. Je suggère que la seule fois que vous l'utilisez, c'est quand vous itérez des objets et que vous avez besoin de valeurs clés.

+2

+1 - le sucre syntaxique de la syntaxe "for ... in" perd rapidement son lustre si vous avez besoin de savoir où dans le boucle vous êtes par rapport au début/fin. – inkedmn

+1

Particulier. Pourquoi est-ce que cela fonctionne mais en utilisant l'index d'un «for in» ne fonctionne pas? J'aurais aimé utiliser le 'for in' pour plus de lisibilité, mais si c'est la seule façon de fonctionner, qu'il en soit ainsi. –

+2

Veuillez noter que 'for' va parcourir chaque objet et retourner la clé dans le tableau associatif, que ce soit un entier, une chaîne, etc. Une raison pour laquelle cela pourrait échouer est que 'networks' n'utilise pas d'entiers pour les clés. –

1

Si réseaux est un tableau de nombres dans l'ordre de 0 à n, cela devrait fonctionner. ;) Si ce n'est pas, vous voudrez peut-être envisager une boucle for standard:

for(var i = 0; i < networks.length; i++) { 
    var network = networks[i]; // in case you need this. 
    if (i == (networks.length - 1)){ 
     //do stuff 
    } 
}