2016-08-21 4 views
1

According to the lodash docs_.extend(object, [sources])は最初のパラメータを変更します。lodash/fp _.endendは、lodashと同じように最初のパラメータを変更しません。

var dest = { 
 
    a: 1 
 
}; 
 
_.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1, "b": 2 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script>

lodash/FPを使用する場合、この場合argument order is unchanged)ない

var dest = { 
 
    a: 1 
 
}; 
 
_.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.fp.js"></script>

私は、これは問題です突然変異する多くのコードthis。これはlodashのバグですか?回避策がありますか?

答えて

2

ソリューションは、変異を許可するようにlodash/FPを設定することです参照してください。

var fp = _.convert({ 
 
    'immutable': false 
 
}) 
 
var dest = { 
 
    a: 1 
 
}; 
 
fp.extend(dest, { 
 
    b: 2 
 
}); 
 

 
// expect { "a": 1, "b": 2 } 
 
// actual { "a": 1, "b": 2 } 
 
console.log(dest);
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.fp.js"></script>

私はthisを変異必要とされ、関数として定義されたのviewmodelsでKnockoutJSを使用しています。 lodash/fpで不変性を無効にしたくない場合は、viewModelをオブジェクトリテラルとして定義することができます。 More here.

1

それはバグではありません:不変性は、関数型プログラミングの形質である、それはガイドの最初に述べています:

lodash/FPモジュールをエクスポートすることにより、より多くの関数型プログラミング(FP) 優しいスタイルを促進しますメソッドlodashのインスタンスは、メソッドをラップして、不変の自動カルトイテレーション - 最初のデータ - 最後の メソッドを生成します。

あなたはlodash/fpや突然変異を使って再考すべきだと思いますが、うまくいっていません。


編集:私が間違っていただけでなく、彼らは一緒に遊ぶことができます。Musical Store's answer

+0

私はこれを理解していますが、私の場合は「this」を変更する必要があります。 'this'は突然変異するだけで、それを割り当てることはできません。 –

関連する問題