JavaScript - Matices de myArray.forEach vs for loop



0 Answers

Puede usar su función foreach personalizada que funcionará mucho mejor que Array.forEach

Debe agregar esto una vez a su código. Esto agregará una nueva función a la matriz.

function foreach(fn) {
    var arr = this;
    var len = arr.length;
    for(var i=0; i<len; ++i) {
        fn(arr[i], i);
    }
}

Object.defineProperty(Array.prototype, 'customForEach', {
    enumerable: false,
    value: foreach
});

Entonces puedes usarlo en cualquier lugar como el Array.forEach

[1,2,3].customForEach(function(val, i){

});

La única diferencia es 3 veces más rápido. https://jsperf.com/native-arr-foreach-vs-custom-foreach

ACTUALIZACIÓN: en la nueva versión de Chrome, se mejoró el rendimiento de .forEach (). Sin embargo, la solución puede proporcionar el rendimiento adicional en otros navegadores.

Question

He visto muchas preguntas que sugieren usar:

for (var i = 0; i < myArray.length; i++){ /* ... */ }

en lugar de:

for (var i in myArray){ /* ... */ }

para matrices, debido a la iteración inconsistente ( ver aquí ).

Sin embargo, parece que no puedo encontrar nada que parezca preferir el bucle orientado a objetos:

myArray.forEach(function(item, index){ /* ... */ });

Lo cual me parece mucho más intuitivo.

Para mi proyecto actual, la compatibilidad de IE8 es importante, y estoy considerando usar el polyfill de Mozilla , sin embargo, no estoy 100% seguro de cómo funcionará.

  • ¿Hay alguna diferencia entre el estándar for loop (el primer ejemplo anterior) y la implementación Array.prototype.forEach de los navegadores modernos?
  • ¿Hay alguna diferencia entre las implementaciones modernas del navegador y la implementación de Mozilla vinculada a las anteriores (con especial atención a IE8)?
  • El rendimiento no es un gran problema, solo la coherencia con la que se iteran las propiedades.



Related