Para detener un for
ciclo temprano en JavaScript, usa 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
}
}
Si se encuentra en un entorno ES2015 (también conocido como ES6), para este caso de uso específico , puede usar Array#findIndex
(para encontrar el índice de la entrada) o Array#find
(para encontrar la entrada en sí), los cuales pueden ser calzados / rellenados:
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
se detiene la primera vez que la devolución de llamada devuelve un valor verdadero, devolviendo el índice de esa llamada a la devolución de llamada; vuelve -1
si la devolución de llamada nunca devuelve un valor verdadero. Array#find
también se detiene cuando encuentra lo que está buscando, pero devuelve la entrada, no su índice (o undefined
si la devolución de llamada nunca devuelve un valor verdadero).
Si está utilizando un entorno compatible con ES5 (o una cuña ES5), puede usar la nueva some
función en matrices, que llama a una devolución de llamada hasta que la devolución de llamada devuelva un valor verdadero:
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`
}
});
Si está usando jQuery, puede usar jQuery.each
para recorrer una matriz; eso se vería así:
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
en unfor
bucle,return false
enjQuery.each
,return true
ensome
, ...).Utilice for of loop en su lugar, que forma parte de la versión ES2015. A diferencia de forEach, podemos usar return, break y continue. Ver https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/
fuente
La lógica es incorrecta. Siempre devolvería el resultado del último elemento en la matriz.
fuente
Sé que esto es un poco viejo, pero en lugar de recorrer la matriz con un ciclo for, sería mucho más fácil usar el método
<array>.indexOf(<element>[, fromIndex])
Recorre una matriz, encuentra y devuelve el primer índice de un valor. Si el valor no está contenido en la matriz, devuelve -1.
<array>
es la matriz a mirar,<element>
es el valor que está buscando y[fromIndex]
es el índice desde el cual comenzar (el valor predeterminado es 0).¡Espero que esto ayude a reducir el tamaño de su código!
fuente
How to stop a JavaScript for loop?
Se hace la respuesta ¿Hay una mejor manera de devolver el índice de un partido / -1 si ninguno .