Как использовать метод includes в lodash для проверки того, находится ли объект в коллекции?

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

Ответ 1

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 (устарел в версии 4) и find сравнивают объекты по их свойствам, поэтому они не требуют ссылочного равенства. В качестве альтернативы includes вы можете попробовать some (также псевдоним как any):

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