(Actualización: mi otra respuesta aquí presenta las opciones que no son jQuery mucho más a fondo. Sin jQuery.eachembargo , la tercera opción a continuación no está incluida).
Cuatro opciones:
Bucle genérico:
var i;
for (i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
o en ES2015 +:
for (let i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
Ventajas : directo, sin dependencia de jQuery, fácil de entender, sin problemas para preservar el significado thisdentro del cuerpo del bucle, sin sobrecarga innecesaria de llamadas a funciones (por ejemplo, en teoría más rápido, aunque de hecho tendría que tiene tantos elementos que lo más probable es que tenga otros problemas ( detalles ).
ES5 forEach:
A partir de ECMAScript5, las matrices tienen una forEachfunción en ellas que facilita el bucle a través de la matriz:
substr.forEach(function(item) {
// do something with `item`
});
Enlace a documentos
(Nota: hay muchas otras funciones, no solo forEach; consulte la respuesta mencionada anteriormente para obtener más detalles).
Ventajas : declarativo, puede usar una función preconstruida para el iterador si tiene uno a mano, si su cuerpo de bucle es complejo, el alcance de una llamada de función a veces es útil, no necesita una ivariable en su ámbito de contención.
Desventajas : Si usted está usando thisen el código que contiene y que desea utilizar thisdentro de su forEachdevolución de llamada, que tienen que o bien A) Pegúela en una variable, de forma que se puede utilizar dentro de la función, B) lo pasa como segundo argumento a forEachpor lo forEachlo configura como thisdurante la devolución de llamada, o C) Use una función de flecha ES2015 + , que se cierra this. Si no hace una de esas cosas, la devolución de llamada thisserá undefined(en modo estricto) o el objeto global ( window) en modo suelto. Solía haber una segunda desventaja que forEachno era universalmente compatible, pero aquí en 2018, el único navegador con el que se encontrará que no tiene forEaches IE8 (y no puede ser correctamente) polirellenado allí, tampoco
ES2015 + for-of:
for (const s of substr) { // Or `let` if you want to modify it in the loop body
// do something with `s`
}
Vea la respuesta vinculada en la parte superior de esta respuesta para obtener detalles sobre cómo funciona.
Ventajas : Simple, directo, ofrece una variable de alcance contenido (o constante, en lo anterior) para la entrada de la matriz.
Desventajas : No es compatible con ninguna versión de IE.
jQuery.each:
jQuery.each(substr, function(index, item) {
// do something with `item` (or `this` is also `item` if you like)
});
( Enlace a documentos )
Ventajas : todas las mismas ventajas que forEach, además, sabes que está ahí ya que estás usando jQuery.
Desventajas : si está usando thisel código que lo contiene, debe pegarlo en una variable para poder usarlo dentro de la función, ya que thissignifica algo más dentro de la función.
Sin thisembargo, puedes evitarlo usando $.proxy:
jQuery.each(substr, $.proxy(function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}, this));
... o Function#bind:
jQuery.each(substr, function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}.bind(this));
... o en ES2015 ("ES6"), una función de flecha:
jQuery.each(substr, (index, item) => {
// do something with `item` (`this` is the same as it was outside)
});
Qué NO hacer:
No lo use for..inpara esto (o si lo hace, hágalo con las garantías adecuadas). Verá gente que dice (de hecho, brevemente hubo una respuesta aquí que dice eso), pero for..inno hace lo que mucha gente piensa que hace (¡hace algo aún más útil!). Específicamente, for..inrecorre los nombres de propiedades enumerables de un objeto (no los índices de una matriz). Dado que las matrices son objetos, y sus únicas propiedades enumerables de forma predeterminada son los índices, en su mayoría parece funcionar en una implementación suave. Pero no es una suposición segura de que solo puede usarlo para eso. Aquí hay una exploración: http://jsbin.com/exohi/3
Debería suavizar el "no" anterior. Si se trata de matrices dispersas (p. Ej., La matriz tiene 15 elementos en total, pero sus índices están esparcidos en el rango de 0 a 150,000 por alguna razón, por lo que lengthes 150,001), y si usa las salvaguardas apropiadas, como hasOwnPropertyy verificando El nombre de la propiedad es realmente numérico (consulte el enlace anterior), for..inpuede ser una forma perfectamente razonable de evitar muchos bucles innecesarios, ya que solo se enumerarán los índices poblados.
.each()ofor...inpara recorrer una matriz es, en general, una mala idea. Es como las edades más lentas que usarforowhile. Usar unfor loopincluso es una gran idea almacenar en caché lalengthpropiedad antes de hacer un bucle.for (var i = 0, len = substr.length; i < len; ...Function#bind. :-) Buen punto, añadido.i++y++ies el resultado de esa expresión, que nunca se usa en el ejemplo anterior. Unforbucle funciona así: 1. Inicialización, 2. Prueba (terminar si es falso), 3. Cuerpo, 4. Actualizar, 5. Volver al paso 2. El resultado de la expresión de actualización no se utiliza para nada.jQuery.each ()
jQuery.each ()
iteración de matriz
iteración de objeto
ejemplo :
javascript loops para array
en bucle
ejemplo
para en
para de
para cada
Recursos
MDN bucles e iteradores
fuente
No hay necesidad de jquery aquí, solo un
forbucle funciona:fuente
Opción 1: el
forbucle tradicionalLos basicos
Un
forbucle tradicional tiene tres componentes:Estos tres componentes están separados entre sí por un
;símbolo. El contenido de cada uno de estos tres componentes es opcional, lo que significa que el siguiente es elforbucle más mínimo posible:Por supuesto, deberá incluir un
if(condition === true) { break; }o unif(condition === true) { return; }lugar dentro de eseforbucle para que deje de funcionar.Por lo general, sin embargo, la inicialización se usa para declarar un índice, la condición se usa para comparar ese índice con un valor mínimo o máximo, y la idea de último momento se usa para incrementar el índice:
Usando un
forbucle tradicional para recorrer una matrizLa forma tradicional de recorrer una matriz es esta:
O, si prefiere hacer un bucle hacia atrás, haga esto:
Sin embargo, hay muchas variaciones posibles, como por ejemplo. éste :
... o este ...
... o este :
Lo que funcione mejor depende en gran medida del gusto personal y del caso de uso específico que está implementando.
Nota :Cada una de estas variaciones es compatible con todos los navegadores, incluidos los más antiguos.
Opción 2: el
whilebucleUna alternativa a un
Nota :forbucle es unwhilebucle. Para recorrer una matriz, puede hacer esto:Al igual que los
forbucles tradicionales , loswhilebucles son compatibles incluso con los navegadores más antiguos.Además, cada bucle while se puede reescribir como un
forbucle. Por ejemplo, elwhile-loop aquí arriba se comporta exactamente de la misma manera que estefor-loop:Opción 3:
for...inyfor...ofEn JavaScript, también puedes hacer esto:
Sin embargo, esto debe usarse con cuidado, ya que no se comporta igual que un
forbucle tradicional en todos los casos, y hay posibles efectos secundarios que deben considerarse. Vea ¿Por qué usar "for ... in" con iteración de matriz es una mala idea? para más detalles.Como alternativa a
Nota :for...in, ahora también hay parafor...of. El siguiente ejemplo muestra la diferencia entre unfor...ofbucle y unfor...inbucle:También debe tener en cuenta que ninguna versión de Internet Explorer es compatible
for...of( Edge 12+ lo hace) y esofor...inrequiere al menos IE10.Opcion 4:
Array.prototype.forEach()Una alternativa a
Nota :For-loops esArray.prototype.forEach(), que usa la siguiente sintaxis:Array.prototype.forEach()es compatible con todos los navegadores modernos, así como con IE9 +.Opcion 5:
jQuery.each()Además de las otras cuatro opciones mencionadas, jQuery también tenía su propia
foreachvariación.Utiliza la siguiente sintaxis:
fuente
Utiliza la
each()función de jQuery.Aquí hay un ejemplo:
fuente
Usa jQuery
each(). Hay otras formas, pero cada una está diseñada para este propósito.Y no coloque la coma después del último número.
fuente
Puedes usar un
for()bucle:fuente
Sintaxis ES6 con función de flecha e interpolación:
fuente
Prueba esto:
fuente
Formas alternativas de iteración a través de una matriz / cadena con efectos secundarios
fuente