web-dev-qa-db-ja.com

文字列配列からLodashを削除

文字列の配列があり、それらのいくつかをすぐに削除したいと思います。しかし、それは機能しません

var list = ['a', 'b', 'c', 'd']
_.remove(list, 'b');
console.log(list); // 'b' still there

_.remove関数は2番目の引数として文字列を受け入れ、それがプロパティ名であると見なします。この場合、lodashに等価性チェックを実行させる方法は?

11
just-boris

もう1つのオプションは、_。pullを使用することです。これは、_。withoutとは異なり、配列のコピーを作成せず、代わりに変更するだけです。

_.pull(list, 'b'); // ['a', 'c', 'd']

参照: https://lodash.com/docs#pull

24
trevor

Giuseppe Pesが指摘しているように、_.removeは関数を期待しています。必要なことを行うためのより直接的な方法は、代わりに_.withoutを使用することです。これは、does要素を取得して直接削除します。

_.without(['a','b','c','d'], 'b');  //['a','c','d']
4
Retsam

関数_.removeは、2番目の引数として文字列を受け入れませんが、配列内の各値に対して呼び出される述語関数を受け入れます。関数がtrueを返す場合、値は配列から削除されます。

Lodas doc: https://lodash.com/docs#remove

述語がtrueを返す配列からすべての要素を削除し、削除された要素の配列を返します。述語はthisArgにバインドされ、3つの引数(value、index、array)で呼び出されます。

したがって、配列からbを削除する場合は、次のようにする必要があります。

var list = ['a', 'b', 'c', 'd']
_.remove(list, function(v) { return v === 'b'; });
["a", "c", "d"]
2
Giuseppe Pes