链式调用
用于处理复杂的数据转换
优化代码,提高阅读性
chain
创建一个 lodash 包装实例。
// 若想解除链式(获得值)必须调用 value 方法。
_.chain(1)
// ...
.value()
// => 1
tap
该方法的目的是进入方法链序列以便修改中间结果。
_.chain([1, 2, 3])
.tap(function(array) {
// 改变传入的数组
array.pop();
})
.reverse()
.value();
// => [2, 1]
thru
该方法的目的是”传递” 值到一个方法链序列以取代中间结果。
_.chain(' abc ')
.chain()
.trim()
.thru(function(value) {
return [value];
})
.value();
// => ['abc']
不太重要
注意(惰性)
若是值为原始类型,那么值不能改,改了也没用,还是会用原来值
若是值为引用类型,那么引用指针不能改,改了也没用,只能在源对象上进行操作
隐式调用
结尾必须是返回原始值或唯一值的函数
才会自动执行整个链条函数(value 函数)
否则就和显示调用一样了…value 结尾才返回值
let arr = [1, 2, 3];
_(arr)
.map(num => num * num)
.sum();
// => 14
_(arr)
.map(num => num * num)
.thru(num => num[1])
.value();
// => 14
显式调用
结尾必须是 value 函数
显式的结束整个链条
个人通常用这个比较多…感觉比隐式明确些
let arr = [];
let handler = _
.chain(arr)
.map(num => num * num)
.sum();
// 这里如果是 arr = [1, 2, 3, 4];
// 引用指针发生了变化,会计算异常
// 还是会按照原指针(空数组)进行计算
arr.push(1, 2, 3, 4);
console.log(handler.value());