4

removeアンダースコアに超単純な関数がないのはなぜですか?

var arr = [1,2,3,4,5];
_.remove(arr, 5);

確かにrejector without... を使用できますが、どちらも破壊的ではありません。何か不足していますか?

昔ながらのやり方でやろうと思います...

arr.splice(arr.indexOf(5), 1);

うーん

4

1 に答える 1

13

説明

これは、Underscore が JavaScript に関数型の概念を提供するためであり、関数型プログラミングの重要な概念の 1 つは参照透過性です。

基本的に、関数には副作用がなく、特定の入力に対して常に同じ出力を返します。つまり、すべての関数はpureです。

配列から要素を削除すると、特定の入力に対して確かに予測可能な結果になりますが、結果は戻り値ではなく副作用になります。したがって、破壊的な機能は機能パラダイムに適合しません。

解決

Underscore で配列から値を削除する正しい方法については、Stack Overflow hereですでに詳細に説明されています。補足として、withoutrejectまたはを使用filterする場合、配列から項目の 1 つのインスタンスのみを削除する場合は、それを一意に識別する必要があります。したがって、次のようにします。

arr = _.without(arr, 5);

fromのすべてのインスタンスを削除します。5arr

于 2013-08-21T16:40:14.713 に答える