javascript - _.chain - underscore JS
Este código funciona bien
var arr = _.range(1,1000);
var parse = _.filter(arr, function(num) {return num%3===0 || num%5===0});
var sum = _.reduce(parse, function(memo, num){ return memo + num; }, 0) //233168
¿Es posible usar la función _.chain() para limpiar este código? He intentado el código a continuación, pero da un error de tipo.
var arr = _.range(1,1000);
var sum = _.chain(arr)
.filter(arr, function(num) {return num%3===0 || num%5===0})
.reduce(arr, function(memo, num){ return memo + num; }, 0)
.value();
Respuesta #1
Solo necesitas eliminar el primer argumento (arr) de cada una de las funciones que tienes dentro de _.chain() y _.value() (ya que ahora se obtienen de la cadena):
var arr = _.range(1,1000);
var sum = _.chain(arr)
.filter(function(num) {return num%3===0 || num%5===0})
.reduce(function(memo, num){ return memo + num; }, 0)
.value();
Y también podrías hacerlo un poco más conciso, dividiendo los argumentos de rango (es decir, 1 y 1000) entre la función chain y la función range:
var sum = _.chain(1).range(1000)
.filter(function(num) {return num%3===0 || num%5===0})
.reduce(function(memo, num){ return memo + num; }, 0)
.value();
Funciona, pero no estoy seguro de si este último es una buena idea en términos de legibilidad del código.
Respuesta #2
Esto funciona y es (IMHO) un poco más claro.
var sum = _(_.range(1000)).chain()
.filter(function (x) { return (x % 3 === 0 || x % 5 === 0) })
.reduce(function (sum, x) { return sum + x }, 0)
.value(); /* try chaining range() and reduce() */
Supongo que está bien resolver koans de JavaScript aquí?
