Aby zatrzymać for
pętlę na wczesnym etapie w JavaScript, użyj break
:
var remSize = [],
szString,
remData,
remIndex,
i;
/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */
remIndex = -1; // Set a default if we don't find it
for (i = 0; i < remSize.length; i++) {
// I'm looking for the index i, when the condition is true
if (remSize[i].size === remData.size) {
remIndex = i;
break; // <=== breaks out of the loop early
}
}
Jeśli pracujesz w środowisku ES2015 (aka ES6), w tym konkretnym przypadku użycia możesz użyć Array#findIndex
(aby znaleźć indeks wpisu) lub Array#find
(aby znaleźć sam wpis), z których oba mogą być podkładane / wypełniane:
var remSize = [],
szString,
remData,
remIndex;
/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */
remIndex = remSize.findIndex(function(entry) {
return entry.size === remData.size;
});
Array#find
:
var remSize = [],
szString,
remData,
remEntry;
/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */
remEntry = remSize.find(function(entry) {
return entry.size === remData.size;
});
Array#findIndex
zatrzymuje się za pierwszym razem, gdy wywołanie zwrotne zwraca prawdziwą wartość, zwracając indeks dla tego wywołania do funkcji zwrotnej; zwraca, -1
jeśli wywołanie zwrotne nigdy nie zwróci prawdziwej wartości. Array#find
zatrzymuje się również, gdy znajdzie to, czego szukasz, ale zwraca wpis, a nie indeks (lub undefined
jeśli wywołanie zwrotne nigdy nie zwraca prawdziwej wartości).
Jeśli używasz środowiska kompatybilnego z ES5 (lub podkładki ES5), możesz użyć nowej some
funkcji na tablicach, która wywołuje wywołanie zwrotne, dopóki nie zwróci prawdziwej wartości:
var remSize = [],
szString,
remData,
remIndex;
/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */
remIndex = -1; // <== Set a default if we don't find it
remSize.some(function(entry, index) {
if (entry.size === remData.size) {
remIndex = index;
return true; // <== Equivalent of break for `Array#some`
}
});
Jeśli używasz jQuery, możesz użyć jQuery.each
pętli przez tablicę; wyglądałoby to tak:
var remSize = [],
szString,
remData,
remIndex;
/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */
remIndex = -1; // <== Set a default if we don't find it
jQuery.each(remSize, function(index, entry) {
if (entry.size === remData.size) {
remIndex = index;
return false; // <== Equivalent of break for jQuery.each
}
});
break
wfor
pętli,return false
injQuery.each
,return true
insome
, ...).Zamiast tego użyj pętli for, która jest częścią wydania ES2015. W przeciwieństwie do forEach, możemy użyć funkcji return, break i continue. Zobacz https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/
źródło
Logika jest nieprawidłowa. Zawsze zwracałby wynik ostatniego elementu tablicy.
źródło
Wiem, że to trochę stare, ale zamiast przechodzić przez tablicę z pętlą for, byłoby znacznie łatwiej użyć metody
<array>.indexOf(<element>[, fromIndex])
Przechodzi przez tablicę, znajdując i zwracając pierwszy indeks wartości. Jeśli wartość nie jest zawarta w tablicy, zwraca -1.
<array>
to tablica do przejrzenia,<element>
wartość, której szukasz, i[fromIndex]
indeks, od którego należy zacząć (domyślnie 0).Mam nadzieję, że pomoże to zmniejszyć rozmiar twojego kodu!
źródło
How to stop a JavaScript for loop?
To nie odpowiedź Czy istnieje lepszy sposób na powrót indeksu meczu / -1 jeżeli żaden .