簡體   English   中英

Curry Lodash 函數,奇怪的行為

[英]Curry Lodash functions, strange behaviour

我正在嘗試使用 lodash 函數,但出現了一些奇怪的行為。 基本上:

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

不一樣

_.curryRight(myFunction)('const')

我的猜測是問題的出現是因為 lodash 中的函數是否要鏈接它們具有不同的數量。

我已經觀察到 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]

所以基本上問題是,為什么最后一個方法的返回值與前兩個不同?

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

這種情況下,不起作用,因為 _.maxBy 的第二個參數 - 必須是字符串“變量”。 你可以去開發者工具中的 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 的所有參數,然后是字符串“變量”。

使用:

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

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

為了curryRight工作, 'variable'必須是第二個參數。

但是,當使用_.map函數時, 'variable'作為第四個參數出現。

這與執行_.map(array, parseInt)時發生的錯誤基本相同,結果將出乎意料,因為parseInt將接收索引作為第二個參數並將其用作基數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM