_.withoutの現在の定義は、最初の引数として配列を受け入れ、次に任意の数の後続の引数を受け入れます。 トリッキーになるかもしれませんが、引数として別の配列を渡すことができれば便利です。
新しい機能は次のように機能します
_.without([1,2,3]、[1、2])
戻り値
[3]
私の知る限り、_。withoutは深く機能しないので、過度に複雑になることはないかもしれません-
_.without([1,2,3、[1]]、[1]、1)
戻り値
[2、3、[1]]
幸い、JavaScriptには、関数に任意の数の引数を渡す組み込みの方法があります。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply
_.without.apply(_, [1, 2, 3], [1, 2])
確実なこと! 愚かな私、どうして私は忘れることができますか...
このように呼ぶ必要があるようです
_.without.apply(_, [[1,2,3], 1, 2])
これにより、少し複雑になります(除外配列を元の配列にシフト解除します)。
更新:この問題の新しいチケットを作成しました: https :
私はあなたの両方に同意する必要があります:署名なしで_。を一貫性のある状態に保つためのJeremyとJeremysが提案した回避策を見つけるためのOndreyに少しハックです(私にとってもうまくいかないようです)。
したがって、2つの新しいアンダースコア関数の導入を提案したいと思います: _.difference(*arrays)
と_.symdifference(a,b)
:違いは、他の提供された配列に表示されない最初の配列からのすべての要素を見つけます、ここで、_。symdifference()は、aまたはbのいずれかにあるが、両方にはない要素を返します。
これらの関数の「インスピレーション」は、 Pythonセットのデータ型とIMHOに由来します。これらはオブジェクトにも適用できるため、配列だけに限定されるべきではありません。
アンダースコアを使用して簡単に記述する方法:_。without.apply(_、[x] .concat(y))は、yの値なしでxの値の配列を返します。
@rubenstolkの回答は、コードをコメントアウトしなかったため、下線が斜体として解釈された場合を除いて機能します。 将来の世代のために! :railway_car :: rocket :: rainbow :: raised_hands:
_.without.apply(_, [originalArray].concat(removeArray));
Githubは2年前にそれをしていなかったと思います@reggi!
ここで自分の道を見つけた人のために...._。difference([0、1、3、9]、[1、3]); // => [0、9]
差出人: http :
私はこれが閉じていることを知っていますが、ES6のスプレッド演算子がこれを助けます;)
@agwidarsitoが言及したES6スプレッド演算子を検索したくない人のために、彼が言っているのは、ES6でこれを実行できるということです。
const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]
ありがとう@addisonbgross!
最も参考になるコメント
ここで自分の道を見つけた人のために...._。difference([0、1、3、9]、[1、3]); // => [0、9]
差出人: http :