2016-03-23 1 views
0

_.partialRightファンクションでlodash(v4.6.1)関数を実行して、_.mapコールバックに戻り、不正な結果を取得しています。Lodash partialRight padStart map悪い結果をもたらします

リプロ:これをやっているlodashコードにダイビング後

_.padStart("0", 2, "0"); 
// "00" 
var f = _.partialRight(_.padStart, 2, "0"); 
f("0"); 
// "00" 
_.map(["0"], function(s) { return f(s); }); 
// ["00"] 
_.map(["0"], f); 
// ["0"] 

、私たちはここに来る:この時点iteratee

function arrayMap(array, iteratee) { 
    var index = -1, 
     length = array.length, 
     result = Array(length); 

    while (++index < length) { 
    result[index] = iteratee(array[index], index, array); 
    } 
    return result; 
} 

は、上記の宣言f機能です。それよりもはるかにコードに潜り込むことなく、私は_.partialRightから追加された引数が、その関数で呼び出された引数の後に追加されると仮定できます。

これで質問の部分に到達しました。これはlodashのバグ/制限ですか?これを行うには良い方法がありますか?

答えて

0

これを達成するために、関数内に_.partialRightの結果関数をラップせずに、_.ary関数を使用して受け入れる引数を制限するように見えます。だから、最終的な結果は次のようになります。

var f = _.ary(_.partialRight(_.padStart, 2, '0'), 1); 
var result = _.map(["0"], f); 
// result == ["00"] 

と、コードの使用状況に醜さを減らすためにさらに一歩それを取るために:

_.mixin({ 
    "padStartTwoZeroes": _.ary(_.partialRight(_.padStart, 2, '0'), 1) 
}); 

var numbers = [0, 5, 10]; 
var paddedNumbersAsStrings = _.map(numbers, _.padStartTwoZeroes); 

しかし、おそらくよりエレガント命名以上の一般的なmapPadStartであなたは手作業で数字と文字をパッドに設定することができます。

とにかく、lodashは機能と柔軟性で私を驚かせることは決してありません。

関連する問題