2、Chain
可以说是 lodash 中最为重要的部件,想要用lodash进行复杂的多步操作都离不开chain的帮助。
首先说说Chain的调用方式有两种:一种是显式调用(Explicit Chaining),一种是隐式调用(Implicit Chaining)。
//下面的例子采用了ECMAScript2015的语法:
//显式调用例子如下:
let numbers = [1, 2, 3, 4, 5];
let sumOfEvenSquares = _.chain(numbers) //注意numbers放置的位置
.filter(n => n % 2 === 0)
.map(n => n * n)
.sum()
.value();
//sumOfEvenSquares: 20
//特别要注意结尾的那个.value()
//隐式调用例子如下:
let sumOfEvenSquares = _(numbers) //注意numbers的位置,不需要显式的使用chain关键字
.filter(n => n % 2 === 0)
.map(n => n * n)
.sum()
let isEven = n => n % 2 === 0;
let square = n => n * n;
let sumOfEvenSquares = _(numbers).filter(isEven).map(square).sum();
从上面例子可以看出,隐式调用比显式调用更加简洁方便。
为什么要多出来一个 .value(),而不是直接出结果呢?那是因为可能要等待延时(Deferred execution)数据的到来,再执行取值。这就是我们常说的Lazy evaluation (延迟计算/惰性求值)
//如下面的例子:首先生成链式表达式
var wallet = _(assets).filter(ownedBy('me'))
.pluck('value')
.reduce(sum);
$json.get("/new/assets").success(function