库里Lodash功能,奇怪的行为

时间:2016-04-09 07:13:20

标签: javascript lodash

我试图讨论一个lodash函数,并且我得到了一些奇怪的行为。基本上是:

function(item){return _.curryRight(myFunction)('const')(item)}

不同
_.curryRight(myFunction)('const')

我的猜测是问题出现了,因为lodash中的函数是否有不同的arity,无论你想链接它们。

我观察到maxBy的行为

var myArrays = [[{variable : 1}, {variable : 2}], [{variable : 3}, {variable : 2}]];

返回预期结果

_.map(myArrays, function(item){return _.maxBy(item, 'variable')})
> [ { variable: 2 }, { variable: 3 } ]

如果我们在函数

中讨论maxBy,我们会得到相同的行为
_.map(myArrays, function(item){return _.curryRight(_maxBy)('variable')(item)})
> [ { variable: 2 }, { variable: 3 } ]

但是,以下操作不起作用

_.map(myArrays, _.curryRight(_.maxBy)('variable'))
>[undefined, undefined]

基本上问题是,为什么最后一个方法与前两个方法的返回方式不一样?

2 个答案:

答案 0 :(得分:0)

_.map(myArrays, _.curryRight(_.maxBy)('variable'))

这种情况不起作用,因为_.maxBy的第二个参数 - 必须是字符串'variable'。您可以在开发人员工具中找到lodash源代码并找到方法_.maxBy。在此源文件中写入“console.log”并保存(Ctrl + s)。

function maxBy(array, iteratee) {
  console.log(arguments);
  return (array && array.length)
    ? baseExtremum(array, getIteratee(iteratee), gt)
    : undefined;
}

在控制台中运行

_.map(myArrays, _.curryRight(_.maxBy)('variable')) 

你看:

[Array[2], 1, Array[2], "variable"]

方法_.maxBy首先传递_.map iteratee函数https://lodash.com/docs#map的所有参数,然后传递该字符串'variable'。

使用:

_.map(myArrays, _.flow(_.identity,  _.curryRight(_.maxBy)('variable')));

它正常工作。 抱歉我的英语不好。

答案 1 :(得分:0)

为了使 curryRight 起作用,'variable' 必须是第二个参数。

但是,当使用 _.map 函数时,'variable' 作为第四个参数出现。

这与执行 _.map(array, parseInt) 时发生的错误基本相同,结果将出乎意料,因为 parseInt 将接收索引作为第二个参数并将其用作基数