Jak mogę uzyskać indeks obiektu, który pasuje do warunku (bez iteracji wzdłuż tablicy)?
Nie możesz, coś musi iterować przez tablicę (przynajmniej raz).
Jeśli warunek bardzo się zmienia, musisz przejść przez pętlę i spojrzeć na znajdujące się w nim obiekty, aby sprawdzić, czy pasują do tego warunku. Jednak w systemie z funkcjami ES5 (lub jeśli zainstalujesz podkładkę), iterację można wykonać dość zwięźle:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
Który używa nowego (ish) Array#somefunkcję , która przechodzi poprzez wpisy w tablicy aż do funkcji dajesz to zwraca true. Podana funkcja zapisuje indeks pasującego wpisu, a następnie wraca, trueaby zatrzymać iterację.
Lub oczywiście po prostu użyj forpętli. Różne opcje iteracji zostały omówione w tej drugiej odpowiedzi .
Ale jeśli zawsze będziesz używać tej samej właściwości do tego wyszukiwania, a jeśli wartości właściwości są unikalne, możesz zapętlić tylko raz i utworzyć obiekt, aby je odwzorować:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Lub ponownie możesz użyć forpętli lub dowolnej innej opcji ).
Jeśli chcesz znaleźć wpis prop2 = "yutu", możesz to zrobić:
var entry = prop2map["yutu"];
Nazywam to „indeksowaniem krzyżowym” tablicą. Oczywiście, jeśli usuniesz lub dodasz wpisy (lub zmienisz ich prop2wartości), musisz również zaktualizować obiekt mapowania.
0?). Oba rozwiązania wykonują więcej iteracji niż jest to wymagane, co jest mniej niż idealne, jeśli tablica jest duża (chociaż szanse na to, że będzie tak duża, że człowiek zauważy, są niskie, chyba że dużo się dzieje ).