And*_*rle 10 javascript lodash
有没有办法在lodash链中获得我自己的自定义功能.所以例如这样:
var l = [1,2,3]
var add = function(a, b){return a+b}
var r =_.chain(l).find(function(a){return a>1}).add(5).value()
=>r = 7
Run Code Online (Sandbox Code Playgroud)
str*_*ide 17
你寻找的是一种扩展lodash原型的方法.事实证明,使用mixin实用程序功能可以轻松完成.在这里查看文档:http: //lodash.com/docs#mixin
在您的示例中,它将如下所示:
var l = [1,2,3];
var add = function(a, b){return a+b}
_.mixin({
add: add
});
var r =_.chain(l).find(function(a){return a>1}).add(5).value()
console.log(r); ==> 7
Run Code Online (Sandbox Code Playgroud)
这里是小提琴上的现场样本:http://jsfiddle.net/g2A9C/
在@stride anwswer之后,我想出了一个更通用的解决方案_.mixin:
function add(a, b, c) {
return a + b + c
}
function sub(a, b, c) {
return a - b - c
}
_.mixin({
run: function (v, f) {
var args = Array.prototype.slice.call(arguments, 2)
args.unshift(v)
return f.apply(this, args)
}
})
var r = _.chain(1).run(add, 1, 1).run(sub, 2, 2).value()
console.log(r) -> -1
1 + 1 + 1 - 2 - 2 = -1
Run Code Online (Sandbox Code Playgroud)
毕竟我想知道为什么这不是lodash中的功能.
另一种选择是放弃链接并通过_.flow.
来自文档:
[流程] 创建一个函数,该函数返回使用所创建函数的 this 绑定调用给定函数的结果,其中每次连续调用都会提供前一个调用的返回值。
这意味着 Flow 中的每个函数都将接收前一个函数的输出作为输入。实际上,这意味着我们不仅限于使用 Lodash API 方法,而是可以混合搭配我们喜欢的任何函数,只要下一个函数能够处理该返回值即可。
var l = [1,2,3]
var add = _.curry((a, b) => a + b);
_.flow(
_.find(a => a > 1),
add(5),
)(l);
// => 7
Run Code Online (Sandbox Code Playgroud)
注意 - 这个示例使用的是 Lodash 的功能版本,如果您不想或不能使用该版本,您仍然可以实现相同的结果,请查看我对有关 Lodash 的另一个问题的其他答案。