_.chain - underscore JS

6
这段代码运行良好。
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

是否可以使用_.chain()函数来简化这段代码?我尝试了下面的代码,但出现了类型错误。

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();
2个回答

8

您只需要从_.chain()_.value()中的每个函数中删除第一个参数(arr),因为它们现在是从链中获取的:

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();

您可以更加简洁地完成此操作,通过将range参数(即11000)在chain函数和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();

它能够正常工作,但就代码可读性而言,我不确定最后一个方法是否是个好主意。


0

这个方法可行,而且(我认为)更加清晰。

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() */

我假设在这里解决JavaScript koans是可以的吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接