2014-09-20 65 views
1

此代碼工作正常_.chain - 強調JS

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()函數來清理此代碼嗎?我試過在下面編寫代碼,但它給出了Type錯誤。

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

回答

3

你只需要你們每個人有_.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(); 

你也可以通過在chain函數和range函數之間分割range arguments(即11000)來做到更簡潔一些:

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

它的工作原理,但我不確定在代碼可讀性方面這最後一個是否是一個好主意。