recorrer for es6 array javascript loops for-loop foreach

es6 - javascript foreach break



Eficiencia de Javascript: ''for'' vs ''forEach'' (1)

para

for bucles son mucho más eficientes. Es una construcción en bucle diseñada específicamente para iterar mientras una condición es verdadera , al mismo tiempo que ofrece un mecanismo de pasos (generalmente para aumentar el iterador). Ejemplo:

for (var i=0, n=arr.length; i < n; ++i ) { ... }

Esto no sugiere que for -loops siempre será más eficiente, solo que los motores y navegadores JS los han optimizado para que lo sean. A lo largo de los años, ha habido compromisos en cuanto a qué construcción de bucle es más eficiente (para, mientras, reducir, revertir, etc.): diferentes navegadores y motores JS tienen sus propias implementaciones que ofrecen diferentes metodologías para producir los mismos resultados. A medida que los navegadores se optimizan aún más para satisfacer las demandas de rendimiento, teóricamente [].forEach podría implementarse de tal manera que sea más rápido o comparable a un for .

Beneficios:

  • eficiente
  • terminación anticipada del bucle (los honores se break y continue )
  • control de condición ( i<n puede ser cualquier cosa y no estar vinculado al tamaño de una matriz)
  • alcance variable ( var i deja disponible después de que finalice el ciclo)

para cada

.forEach son métodos que principalmente iteran sobre matrices (también sobre otros enumerables, como los objetos Map y Set ). Son más nuevos y proporcionan código que es subjetivamente más fácil de leer. Ejemplo:

[].forEach((val, index)=>{ ... });

Beneficios:

  • no implica una configuración variable (itera sobre cada elemento de la matriz)
  • funciones / funciones de flecha abarcan la variable al bloque
    En el ejemplo anterior, val sería un parámetro de la función recién creada. Por lo tanto, cualquier variable llamada val antes del ciclo, mantendría sus valores después de que finalice.
  • subjetivamente más fácil de mantener, ya que puede ser más fácil identificar lo que está haciendo el código: está iterando sobre un enumerable; mientras que un bucle for podría usarse para cualquier número de esquemas de bucle

Actuación

El rendimiento es un tema complicado, que generalmente requiere algo de experiencia cuando se trata de previsión o enfoque. Para determinar con anticipación (mientras se desarrolla) cuánta optimización puede requerirse, un programador debe tener una buena idea de la experiencia pasada con el caso del problema, así como una buena comprensión de las posibles soluciones.

El uso de jQuery en algunos casos puede ser demasiado lento a veces (un desarrollador experimentado puede saberlo), mientras que otros pueden ser un problema, en cuyo caso el cumplimiento entre navegadores de la biblioteca y la facilidad de realizar otras funciones (por ejemplo, AJAX, manejo de eventos) valdría la pena el tiempo de desarrollo (y mantenimiento) ahorrado.

Otro ejemplo es que si el rendimiento y la optimización lo fueran todo, no habría otro código que la máquina o el ensamblaje. Obviamente, ese no es el caso, ya que hay muchos idiomas diferentes de alto y bajo nivel, cada uno con sus propias compensaciones. Estas compensaciones incluyen, entre otras, especialización, facilidad y velocidad de desarrollo, facilidad y velocidad de mantenimiento, código optimizado, código libre de errores, etc.

Enfoque

Si no comprende bien si algo requerirá un código optimizado, generalmente es una buena regla general escribir primero un código que se pueda mantener. A partir de ahí, puede probar y determinar qué necesita más atención cuando sea necesario.

Dicho esto, ciertas optimizaciones obvias deberían ser parte de la práctica general y no requerir ningún pensamiento. Por ejemplo, considere el siguiente ciclo:

for (var i=0; i < arr.length; ++i ){}

Para cada iteración del bucle, JavaScript está recuperando la arr.length , una operación de búsqueda de costos en cada ciclo. No hay razón para que esto no sea así:

for (var i=0, n=arr.length; i < n; ++i){}

Esto hace lo mismo, pero solo recupera arr.length una vez, almacenando en caché la variable y optimizando su código.

¿Cuál es el estándar actual en 2017 en Javascript con for () loops vs a .forEach.

Actualmente estoy abriéndome camino a través de Colt Steeles "Web Dev Bootcamp" en Udemy y él favorece forEach más en sus enseñanzas. Sin embargo, he buscado varias cosas durante los ejercicios como parte del trabajo del curso y encuentro cada vez más recomendaciones para usar un bucle for lugar de forEach . La mayoría de las personas parecen afirmar que el ciclo for es más eficiente.

¿Es esto algo que ha cambiado desde que se escribió el curso (alrededor de 2015) o son realmente sus pros y sus contras para cada uno, que aprenderá con más experiencia?

Cualquier consejo sería muy apreciado.