La mayoría de los casos de uso del método reduce() pueden reescribirse fácilmente con un ciclo for. Y las pruebas en JSPerf muestran que reduce() suele ser un 60% -75% más lento, dependiendo de las operaciones realizadas dentro de cada iteración.¿Hay algún beneficio real para usar el método javascript Array reduce()?
¿Hay alguna razón real para utilizar reducir() entonces, aparte de ser capaz de escribir código en un 'estilo funcional'? Si puede obtener una ganancia de rendimiento del 60% al escribir solo un poco más de código, ¿por qué alguna vez usaría reducir()?
EDIT: De hecho, otros métodos funcionales como forEach() y mapa() todas muestran un rendimiento similar, siendo al menos un 60% más lento que simple para bucles.
Aquí hay un enlace a la prueba JSPerf (con llamadas de función): forloop vs forEach
estoy de acuerdo con usted acerca de lo que constituye una comparación de rendimiento válido. El _primero_ es la comparación válida, porque seguramente (para su ejemplo) la pregunta es "¿Qué método es más rápido agregando uno a cada elemento de la matriz?", No "¿Qué método es el más rápido pero cualquier método que no utiliza una llamada de función es descalificado? de la entrada ". Estoy de acuerdo en que si asumes que quieres una función de todos modos para fines de alcance/cierre, entonces también podrías usar '.reduce()' o '.forEach()' o lo que sea. – nnnnnn
La pregunta es exactamente sobre la sintaxis, por lo que es una comparación de rendimiento válida. Tal vez debería reformular la pregunta en un escenario en el que quieras exprimir cada bit de rendimiento posible. En ese caso, no puedo encontrar una buena razón para no usar un ciclo for simple. ¿Puede proporcionar un ejemplo concreto en el que el alcance es absolutamente necesario? –
@EvanYou: '[1,2,3].forEach (function (x) {setTimeout (function() {alert (x)}, 1000)}) '(alerts 1,2,3) contra' for (var i = 0; i <4; i ++) {setTimeout (función() {alerta (i)}, 1000)} '(alertas 4,4,4) – ninjagecko