(Actualización: mi otra respuesta aquí presenta las opciones que no son jQuery mucho más a fondo. Sin jQuery.each
embargo , 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 this
dentro 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 forEach
funció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 i
variable en su ámbito de contención.
Desventajas : Si usted está usando this
en el código que contiene y que desea utilizar this
dentro de su forEach
devolució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 forEach
por lo forEach
lo configura como this
durante 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 this
será undefined
(en modo estricto) o el objeto global ( window
) en modo suelto. Solía haber una segunda desventaja que forEach
no era universalmente compatible, pero aquí en 2018, el único navegador con el que se encontrará que no tiene forEach
es 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 this
el código que lo contiene, debe pegarlo en una variable para poder usarlo dentro de la función, ya que this
significa algo más dentro de la función.
Sin this
embargo, 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..in
para 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..in
no hace lo que mucha gente piensa que hace (¡hace algo aún más útil!). Específicamente, for..in
recorre 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 length
es 150,001), y si usa las salvaguardas apropiadas, como hasOwnProperty
y verificando El nombre de la propiedad es realmente numérico (consulte el enlace anterior), for..in
puede ser una forma perfectamente razonable de evitar muchos bucles innecesarios, ya que solo se enumerarán los índices poblados.
.each()
ofor...in
para recorrer una matriz es, en general, una mala idea. Es como las edades más lentas que usarfor
owhile
. Usar unfor loop
incluso es una gran idea almacenar en caché lalength
propiedad antes de hacer un bucle.for (var i = 0, len = substr.length; i < len; ...
Function#bind
. :-) Buen punto, añadido.i++
y++i
es el resultado de esa expresión, que nunca se usa en el ejemplo anterior. Unfor
bucle 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
for
bucle funciona:fuente
Opción 1: el
for
bucle tradicionalLos basicos
Un
for
bucle 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 elfor
bucle más mínimo posible:Por supuesto, deberá incluir un
if(condition === true) { break; }
o unif(condition === true) { return; }
lugar dentro de esefor
bucle 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
for
bucle 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
while
bucleUna alternativa a un
Nota :for
bucle es unwhile
bucle. Para recorrer una matriz, puede hacer esto:Al igual que los
for
bucles tradicionales , loswhile
bucles son compatibles incluso con los navegadores más antiguos.Además, cada bucle while se puede reescribir como un
for
bucle. Por ejemplo, elwhile
-loop aquí arriba se comporta exactamente de la misma manera que estefor
-loop:Opción 3:
for...in
yfor...of
En JavaScript, también puedes hacer esto:
Sin embargo, esto debe usarse con cuidado, ya que no se comporta igual que un
for
bucle 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...of
bucle y unfor...in
bucle:También debe tener en cuenta que ninguna versión de Internet Explorer es compatible
for...of
( Edge 12+ lo hace) y esofor...in
requiere 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
foreach
variació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