1. ホーム
  2. javascript

[解決済み] lodashのincludesメソッドを使って、オブジェクトがコレクションにあるかどうかを確認するにはどうすればよいですか?

2022-04-22 08:27:25

質問

で基本的なデータ型のメンバーシップをチェックすることができます。 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用でしたが、lodash4.0.0用に更新されました。

解決方法を教えてください。

その includes (旧称 containsinclude ) メソッドはオブジェクトを参照で(正確には === ). の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