使用此代码:
var objects = [{'a': 1}, {'b': 2}];
var result1, result2;
result1 = _(objects)
.filter(_.partialRight(_.has, 'a'))
.value();
result2 = _(objects)
.filter(function(o){ return _.partialRight(_.has, 'a')(o);})
.value();
result1
将是一个空数组,result2
将为[{'a': 1}]
。
为什么呢?
PS
Plunker:
http://plnkr.co/edit/6nhLBtq2id0GSYXVjhcX?p=preview
答案 0 :(得分:3)
正在发生的事情是filter
需要更多的参数,这些参数在组合中被隐式应用,但在应用程序中却没有:
// what it looks like
.filter(_.partialRight(_.has, 'a'))
// what's happening
.filter(function(o,i,xs){return _.partialRight(_.has,'a')(o,i,xs);})
答案 1 :(得分:1)
如果不创建匿名函数,你可以做你想做的事情:
result1 = _(objects)
.filter(_.compose(_.partialRight(_.has, 'a'), _.identity))
.value();
说明:
_.compose()
函数接受函数引用的数量并将它们相互应用,将执行结果从前一个函数传递给下一个函数。 _.identity()
函数返回第一个传递的参数。
因此,如果我们展开_.compose(_.partialRight(_.has, 'a'), _.identity)
表达式,它将如下所示:
function (a, b, c) {
return _.partialRight(_.has, 'a')(_.identity(a, b, c));
}
在线演示:http://plnkr.co/edit/kU3MkrfSJol9c9JbGBqo?p=preview
参考文献: