lodash 让我检查基本数据类型的成员资格includes:
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
(includes以前称为containsand include)方法通过引用(或更准确地说, with ===)比较对象。因为{"b": 2}您的示例中的两个对象文字代表 不同 的实例,所以它们不相等。注意:
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方法通过属性比较对象,因此它们不需要引用相等。作为 的替代方法includes,您可能想尝试some(也别名为any):
where
find
some
any
_.some([{"a": 1}, {"b": 2}], {"b": 2}) > true