如何使用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
(以前称为contains
和include
)方法通过引用(或更准确地说,用===
)比较对象。 因为在你的例子中, {"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