Para interromper um for
loop no início do JavaScript, use 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
}
}
Se você estiver em um ambiente ES2015 (também conhecido como ES6), para este caso de uso específico , poderá usar Array#findIndex
(para encontrar o índice da entrada) ou Array#find
(para encontrar a própria entrada), os quais podem ser shimmed / polyfilled:
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
para na primeira vez em que o retorno de chamada retorna um valor verdadeiro, retornando o índice dessa chamada para o retorno de chamada; retorna -1
se o retorno de chamada nunca retornar um valor verdadeiro. Array#find
também para quando encontra o que você está procurando, mas retorna a entrada, não o índice (ou undefined
se o retorno de chamada nunca retornar um valor verdadeiro).
Se você estiver usando um ambiente compatível com ES5 (ou um shim ES5), poderá usar a nova some
função em matrizes, que chama um retorno de chamada até que o retorno retorne um valor verdadeiro:
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`
}
});
Se você estiver usando jQuery, poderá usar um jQuery.each
loop através de uma matriz; que ficaria assim:
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
em umfor
loop,return false
emjQuery.each
,return true
emsome
, ...).Use o loop for do que faz parte da versão ES2015. Ao contrário do forEach, podemos usar return, break e continue. Consulte https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/
fonte
A lógica está incorreta. Sempre retornaria o resultado do último elemento na matriz.
fonte
Eu sei que isso é um pouco antigo, mas em vez de fazer um loop pela matriz com um loop for, seria muito mais fácil usar o método
<array>.indexOf(<element>[, fromIndex])
Ele percorre uma matriz, encontrando e retornando o primeiro índice de um valor. Se o valor não estiver contido na matriz, ele retornará -1.
<array>
é a matriz a ser examinada,<element>
é o valor que você está procurando e[fromIndex]
é o índice para iniciar (o padrão é 0).Espero que isso ajude a reduzir o tamanho do seu código!
fonte
How to stop a JavaScript for loop?
Ele faz resposta Existe uma maneira melhor para retornar o índice de um jogo / -1 se nenhum .