lodash の include メソッドを使用して、オブジェクトがコレクション内にあるかどうかを確認するにはどうすればよいですか? 質問する

lodash の include メソッドを使用して、オブジェクトがコレクション内にあるかどうかを確認するにはどうすればよいですか? 質問する

lodash を使用すると、次のようにして基本データ型のメンバーシップを確認できますincludes

_.includes([1, 2, 3], 2)
> true

しかし、以下は機能しません:

_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false

コレクションを検索する次の方法は問題なく機能しているように見えるため、混乱します。

_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}

何が間違っているのでしょうか? コレクション内のオブジェクトのメンバーシップを確認するにはどうすればいいですかincludes?

編集: 質問は元々 lodash バージョン 2.4.1 向けでしたが、lodash 4.0.0 用に更新されました。

ベストアンサー1

includes(以前はcontainsおよび と呼ばれていましたinclude)メソッドは、オブジェクトを参照によって(より正確には を使って)比較します。例の の===2つのオブジェクトリテラルは、{"b": 2}違うインスタンスは等しくありません。注意:

({"b": 2} === {"b": 2})
> false

ただし、 のインスタンスは 1 つしかないため、これは機能します{"b": 2}

var a = {"a": 1}, b = {"b": 2};
_.includes([a, b], b);
> true

一方、where(v4では非推奨)およびfindメソッドはオブジェクトをそのプロパティで比較するため、参照の等価性は必要ありません。 の代わりとしてincludes、以下を試してみるとよいでしょう。some(別名any):

_.some([{"a": 1}, {"b": 2}], {"b": 2})
> true

おすすめ記事