Wie kann ich den Index des Objekts ermitteln, der einer Bedingung entspricht (ohne entlang des Arrays zu iterieren)?
Sie können nicht, etwas muss das Array durchlaufen (mindestens einmal).
Wenn sich die Bedingung stark ändert, müssen Sie die darin enthaltenen Objekte durchlaufen und überprüfen, ob sie mit der Bedingung übereinstimmen. Auf einem System mit ES5-Funktionen (oder wenn Sie einen Shim installieren) kann diese Iteration jedoch ziemlich präzise durchgeführt werden:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Dabei wird die neue (ish) Array#some
Funktion verwendet , die die Einträge im Array durchläuft, bis die von Ihnen angegebene Funktion true zurückgibt. Die Funktion, die ich ihm gegeben habe, speichert den Index des übereinstimmenden Eintrags und kehrt dann zurück true
, um die Iteration zu stoppen.
Oder verwenden Sie einfach eine for
Schleife. Ihre verschiedenen Iterationsoptionen werden in dieser anderen Antwort behandelt .
Wenn Sie jedoch immer dieselbe Eigenschaft für diese Suche verwenden und die Eigenschaftswerte eindeutig sind, können Sie nur eine Schleife ausführen und ein Objekt erstellen, um sie zuzuordnen:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Oder Sie können eine for
Schleife oder eine Ihrer anderen Optionen verwenden .)
Wenn Sie dann den Eintrag mit prop2 = "yutu"
finden müssen, können Sie dies tun:
var entry = prop2map["yutu"];
Ich nenne das "Cross-Indexing" das Array. Wenn Sie Einträge entfernen oder hinzufügen (oder deren prop2
Werte ändern ), müssen Sie natürlich auch Ihr Zuordnungsobjekt aktualisieren.
0
?). Beide Lösungen mehr tun Iteration als erforderlich, was weniger ist als ideal , wenn das Array groß ist (obwohl die Chancen , es so groß ein Mensch würde bemerken niedrig sind, es sei denn , Lookups eine geschehen viel ).