如何使用lodash中的includes方法来检查对象是否在集合中?

lodash让我检查基本数据types的成员includes

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

但以下不起作用:

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

这使我感到困惑,因为通过集合进行search的以下方法似乎做得很好:

 _.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

includes (以前称为containsinclude )方法通过引用(或更准确地说,用=== )比较对象。 因为在你的例子中, {"b": 2}的两个对象文字表示不同的实例,所以它们是不相等的。 注意:

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

但是,这将工作,因为只有一个{"b": 2}实例:

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

另一方面, where (在v4中不推荐使用)和find方法通过它们的属性比较对象,所以它们不需要引用相等。 作为包含的替代方法,您可能需要尝试some (也可以是别名):

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