小编典典

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

all

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


阅读 161

收藏
2022-08-16

共1个答案

小编典典

includes以前称为containsand
include)方法通过引用(或更准确地说, with ===)比较对象。因为{"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
2022-08-16