Wie bekomme ich den Index des Objekts, das eine Bedingung erfüllt (ohne das Array zu durchlaufen)?
Du kannst das nicht, etwas muss mindestens einmal durch das Array iterieren.
Wenn sich die Bedingung häufig ändert, musst du durchlaufen und die Objekte darin anschauen, um zu sehen, ob sie die Bedingung erfüllen. Allerdings kann auf einem System mit ES5-Funktionen (oder wenn du ein Shim installierst) diese Iteration recht prägnant durchgeführt werden:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Dies verwendet die neue(ish) Array#some
Funktion, die sich durch die Einträge im Array durchläuft, bis die von dir übergebene Funktion true zurückgibt. Die von mir übergebene Funktion speichert den Index des übereinstimmenden Eintrags und gibt dann true
zurück, um die Iteration zu stoppen.
Oder natürlich kannst du einfach eine for
-Schleife verwenden. Deine verschiedenen Möglichkeiten zur Iteration sind in dieser anderen Antwort abgedeckt.
Aber wenn du immer dieselbe Eigenschaft für die Suche verwenden wirst und wenn die Eigenschaftswerte eindeutig sind, kannst du nur einmal durchlaufen und ein Objekt erstellen, um sie zu verknüpfen:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Oder du könntest wieder eine for
-Schleife verwenden oder eine deiner anderen Möglichkeiten aus deinen anderen Optionen.)
Dann, wenn du den Eintrag mit prop2 = "yutu"
finden musst, kannst du folgendes tun:
var entry = prop2map["yutu"];
Ich nenne dies "cross-indexing" des Arrays. Natürlich musst du dein Zuordnungsobjekt aktualisieren, wenn du Einträge entfernst oder hinzufügst (oder ihre prop2
-Werte änderst).