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版本进行了更新

最佳答案

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 方法通过属性比较对象,因此它们不需要引用相等。作为includes的替代方法,您可能需要尝试 some (也别名为any):
_.some([{"a": 1}, {"b": 2}], {"b": 2})
> true

关于javascript - 如何使用lodash中的include方法检查对象是否在集合中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25171143/

10-12 07:29
查看更多