Comment faire pour obtenir l'index d'un objet à l'intérieur d'un tableau d'objets?
J'ai un tableau d'objets JavaScript comme ceci:
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
Ce sont les objets générés par le même constructeur et ajoutés au tableau à l'intérieur d'une boucle. Les objets ont des méthodes dans le prototype qui ont besoin de connaître de l'objet indice dans le tableau pour faire leur travail. Actuellement ce que je fais est de définir une propriété appelée id
à l'intérieur de chaque objet quand je le créer à l'intérieur de la boucle, égal à l'index du tableau. Quelque chose comme ceci:
box[i].id = i;
Cependant, je ne suis pas totalement satisfait, car chaque fois que je réorganiser le tableau à l'aide de sort()
j'ai pour exécuter une boucle de mise à jour de la id
propriétés avec les nouvelles valeurs de l'indice.
Ma question est si il y a un moyen de savoir à l'intérieur d'un objet de son indice dans le tableau, sans avoir à définir la propriété id, j'espère que vous pourrez m'aider.
Merci d'avance.
Voir patrick bonne réponse. Ce type de couplage conduit invariablement à beaucoup d'échec; l'affaire a fait remarquer est que la "pointe" du problème. Il est peut-être meilleure solution possible à un autre (mais liés) question.
OriginalL'auteur VerizonW | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'une fonction à l'intérieur d'un objet dans le Tableau va être au courant de l'indice du Tableau qui est le référencement.
Parce que chaque élément d'un Tableau est simplement en pointant l'objet en mémoire, on pouvait concevoir des dizaines d'éléments du Tableau, les variables, les propriétés de l'Objet, etc qui font référence à ce même objet, alors la fonction (ou l'objet qui contient la fonction) ne sais pas qui de retour de référence que vous êtes l'espoir de faire.
J'imagine que vous serez coincés faire ce que vous faites si vous avez besoin de connaître son indice dans le Tableau.
Je suppose que la fonction peut appeler
indexOf()
contre le Tableau, car il renvoie uneindex
, mais qui aurait besoin d'un peu de surcharge pour chaque appel, et vous aurez besoin de l'ajouter pour non pris en charge navigateurs.OriginalL'auteur user113716
Pourquoi ne pas ajouter une propriété unique sur chaque objet et de l'utilisation de cette propriété à la recherche de la indexOf cet Objet.
Si vous avez un constructeur, vous pouvez ajouter un _id puis recherche de l'id de l'aide:
Cela fonctionne même si vous trier le tableau, mais vous devez garder à l'id unique.
Array.le prototype.map
n'est pas disponible sur la version IE7 ou IE8. ES5 Compatibilitébtw, je n'aime pas cette solution, mais il va travailler sur votre problème 🙂
OriginalL'auteur German Attanasio