Comment puis-je obtenir l'index de l'objet qui correspond à une condition (sans itérer le long du tableau)?
Vous ne pouvez pas, quelque chose doit parcourir le tableau (au moins une fois).
Si la condition change beaucoup, vous devrez parcourir et regarder les objets qui s'y trouvent pour voir s'ils correspondent à la condition. Cependant, sur un système avec des fonctionnalités ES5 (ou si vous installez un shim), cette itération peut être effectuée de manière assez concise:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Qui utilise la nouvelle (ish) Array#some
fonction , qui fait une boucle à travers les entrées du tableau jusqu'à ce que la fonction que vous lui donnez retourne vrai. La fonction que je lui ai donnée enregistre l'index de l'entrée correspondante, puis revient true
pour arrêter l'itération.
Ou bien sûr, utilisez simplement une for
boucle. Vos différentes options d'itération sont couvertes dans cette autre réponse .
Mais si vous allez toujours utiliser la même propriété pour cette recherche et si les valeurs de propriété sont uniques, vous pouvez boucler une seule fois et créer un objet pour les mapper:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Ou, encore une fois, vous pouvez utiliser une for
boucle ou l'une de vos autres options .)
Ensuite, si vous avez besoin de trouver l'entrée avec prop2 = "yutu"
, vous pouvez le faire:
var entry = prop2map["yutu"];
J'appelle cela "l'indexation croisée" du tableau. Naturellement, si vous supprimez ou ajoutez des entrées (ou modifiez leurs prop2
valeurs), vous devez également mettre à jour votre objet de mappage.
0
?). Les deux solutions font plus d'itérations que nécessaire, ce qui n'est pas idéal si le tableau est grand (bien que les chances qu'il soit si grand qu'un humain le remarquerait sont faibles, à moins que les recherches ne se produisent souvent ).