Javascript 使用自定义函数在lodash中创建链
有没有办法在lodash链中获得我自己的自定义函数。例如:Javascript 使用自定义函数在lodash中创建链,javascript,lodash,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 您要寻找的是一种扩展lodash原型的方法。事实证明,使用mixin实用程序函数可以很容易地完成这项工作。在此处查看文档: 在您的示例中,它将如下所示: var l = [
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
您要寻找的是一种扩展lodash原型的方法。事实证明,使用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
这里是fiddle上的实时示例:在@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
毕竟,我想知道为什么这不是lodash中的内置函数。另一种选择是通过删除链接和利用函数组合 从文档中: [Flow]创建一个函数,返回调用给定函数的结果 具有已创建函数的此绑定的函数,其中 后续调用将提供上一个调用的返回值 这意味着流中的每个函数都将接收前一个函数的输出作为输入。在实践中,这意味着我们不仅限于使用LodashAPI方法,而且我们可以混合和匹配我们喜欢的任何函数,只要下一个函数能够处理该返回值
var l = [1,2,3]
var add = _.curry((a, b) => a + b);
_.flow(
_.find(a => a > 1),
add(5),
)(l);
// => 7
注意-本例使用的是Lodash的函数版本,如果您不想或不能使用该版本,您仍然可以获得相同的结果,请检查。使用内置函数可以实现这一点,包括
.map
和组合.partial
(如有必要):`\uuArr.map(\uu.partial(add,\u1))