[英]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.