Con*_*ean 134 javascript functional-programming lodash
lodash让我检查基本数据类型的成员资格includes:
_.includes([1, 2, 3], 2)
> true
Run Code Online (Sandbox Code Playgroud)
但以下不起作用:
_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为以下搜索集合的方法似乎做得很好:
_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何检查集合中对象的成员资格includes?
编辑:问题最初是针对lodash版本2.4.1,更新为lodash 4.0.0
p.s*_*w.g 201
的includes(以前称为contains和include)方法比较由参考对象(或者更准确地说,用===).因为{"b": 2}示例中的两个对象文字表示不同的实例,所以它们不相等.注意:
({"b": 2} === {"b": 2})
> false
Run Code Online (Sandbox Code Playgroud)
但是,这将起作用,因为只有一个实例{"b": 2}:
var a = {"a": 1}, b = {"b": 2};
_.includes([a, b], b);
> true
Run Code Online (Sandbox Code Playgroud)
另一方面,where(在v4中弃用)和find方法按对象的属性进行比较,因此它们不需要引用相等.作为替代方案includes,您可能想尝试some(也有别名any):
_.some([{"a": 1}, {"b": 2}], {"b": 2})
> true
Run Code Online (Sandbox Code Playgroud)
通过补充答案p.s.w.g,这里是实现这一使用其他三种方式lodash 4.17.5,而无需使用 _.includes():
假设仅在 尚不存在entry的对象中添加对象。numbersentry
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}]
Run Code Online (Sandbox Code Playgroud)
如果要返回Boolean,在第一种情况下,可以检查正在返回的索引:
_.findIndex(numbers, (o) => { return _.isMatch(o, entry) }) > -1;
// output: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
202160 次 |
| 最近记录: |