Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 奇怪的洛达斯行为_Javascript_Lodash - Fatal编程技术网

Javascript 奇怪的洛达斯行为

Javascript 奇怪的洛达斯行为,javascript,lodash,Javascript,Lodash,使用此代码: 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将是一个空数

使用此代码:

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 普朗克:

发生的事情是,过滤器接受更多的参数,这些参数在组合中隐式应用,但在应用程序中没有:

// what it looks like
.filter(_.partialRight(_.has, 'a'))

// what's happening
.filter(function(o,i,xs){return _.partialRight(_.has,'a')(o,i,xs);})
请参见此处

发生的情况是,筛选器接受更多的参数,这些参数在组合中隐式应用,但在应用程序中没有:

// what it looks like
.filter(_.partialRight(_.has, 'a'))

// what's happening
.filter(function(o,i,xs){return _.partialRight(_.has,'a')(o,i,xs);})

请参见此处

此答案是对“.”的补充:

这就是如何在不创建匿名函数的情况下执行所需操作的方法:

result1 = _(objects)
  .filter(_.compose(_.partialRight(_.has, 'a'), _.identity))
  .value();
说明:

compose函数接受函数引用的数量,并逐个应用它们,将执行结果从上一个函数传递到下一个函数。函数返回第一个传递的参数

因此,如果我们打开u.compose uu.partiOkay Okay Okay Okas,'a',Okay.identity表达式,它将如下所示:

function (a, b, c) {
    return _.partialRight(_.has, 'a')(_.identity(a, b, c));
}
在线演示:

参考资料:


这个答案是对“.”的补充:

这就是如何在不创建匿名函数的情况下执行所需操作的方法:

result1 = _(objects)
  .filter(_.compose(_.partialRight(_.has, 'a'), _.identity))
  .value();
说明:

compose函数接受函数引用的数量,并逐个应用它们,将执行结果从上一个函数传递到下一个函数。函数返回第一个传递的参数

因此,如果我们打开u.compose uu.partiOkay Okay Okay Okas,'a',Okay.identity表达式,它将如下所示:

function (a, b, c) {
    return _.partialRight(_.has, 'a')(_.identity(a, b, c));
}
在线演示:

参考资料:


你为什么认为这是PartialOK的问题?它将a附加到组合参数数组的末尾,即在o、i、xs之后。这意味着,\ u0.has获取i作为第二个参数。@DCoder:\ u0.has,'a'应该返回一个需要一个参数的函数。似乎需要不止一个。对吗?应该返回一个需要一个参数的函数,是吗?它返回一个函数,该函数接受由“部分应用”附加的任意数量的参数。实际调用如下所示:u.haso,i,xs,'a'。与u.haso相比,“a”就是调用返回不同结果的原因actually@zerkms:是的,听起来不错,我搞糊涂了。我忽略了正确性,因为我的函数通常以相反的顺序接受参数,所以我会这样做。filterhas'a',has在哪里是curry。你为什么认为这是partialok的问题?它将a附加到组合参数数组的末尾,即在o、i、xs之后。这意味着,\ u0.has获取i作为第二个参数。@DCoder:\ u0.has,'a'应该返回一个需要一个参数的函数。似乎需要不止一个。对吗?应该返回一个需要一个参数的函数,是吗?它返回一个函数,该函数接受由“部分应用”附加的任意数量的参数。实际调用如下所示:u.haso,i,xs,'a'。与u.haso相比,“a”就是调用返回不同结果的原因actually@zerkms:是的,听起来不错,我搞糊涂了。我忽略了正确,因为我的函数通常以相反的顺序接受参数,所以我会这样做。