![](/img/trans.png)
[英]How do I use lodash to check every item in a collection except those that dont meet my condition?
[英]How do I use the includes method in lodash to check if an object is in the collection?
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
(以前称为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
):
_.some([{"a": 1}, {"b": 2}], {"b": 2})
> true
通过pswg
补充答案,这里是使用lodash
4.17.5
实现此lodash
其他三种方法,而不使用_.includes()
:
说你要添加对象entry
到对象的数组numbers
,只有entry
不存在。
let numbers = [
{ to: 1, from: 2 },
{ to: 3, from: 4 },
{ to: 5, from: 6 },
{ to: 7, from: 8 },
{ to: 1, from: 2 } // intentionally added duplicate
];
let entry = { to: 1, from: 2 };
/*
* 1. This will return the *index of the first* element that matches:
*/
_.findIndex(numbers, (o) => { return _.isMatch(o, entry) });
// output: 0
/*
* 2. This will return the entry that matches. Even if the entry exists
* multiple time, it is only returned once.
*/
_.find(numbers, (o) => { return _.isMatch(o, entry) });
// output: {to: 1, from: 2}
/*
* 3. This will return an array of objects containing all the matches.
* If an entry exists multiple times, if is returned multiple times.
*/
_.filter(numbers, _.matches(entry));
// output: [{to: 1, from: 2}, {to: 1, from: 2}]
如果要返回Boolean
,在第一种情况下,您可以检查正在返回的索引:
_.findIndex(numbers, (o) => { return _.isMatch(o, entry) }) > -1;
// output: true
您可以使用find
来解决您的问题
const data = [{"a": 1}, {"b": 2}]
const item = {"b": 2}
find(data, item)
// > true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.