我已经研究了几天,觉得我在这里缺少一个明显的实现。
(有关类似内容,请参阅 lodash Filter collection using array of values)。
我想做的是获取用户已有的项目集合,然后使用它从整个项目列表中进行筛选。有很多方法可以遍历列表并创建一个新集合并返回它,或者有一种方法可以创建一个 mixin 来执行此操作,但我很好奇是否只有一行代码或一个概念丢失的。目标是对集合中的每个对象进行深入比较以确定等价性。
这是示例(此处为 jsFiddle:http://jsfiddle.net/kxLt534f/)
var collection = [
{id:1, name:'one'},
{id:2, name:'two'},
{id:3, name:'three'}
];
var filter = [
{id:2, name:'two'}
];
// what I want to be able to do
// var result = _.someFilterMethod(collection,filter);
// what it looks liked I'll have to do
var filtered = _.select(collection, function(c){
var same = false;
_.forEach(filter,function(f) {
same = _.isEqual(f,c);
});
return !same;
});
console.warn(filtered); // output is : [{id:1,name:'one',id:3,name:'three'}]
一定有更好的方法来做到这一点,但我一生都看不到它。如有任何建议,我们将不胜感激!
最佳答案
函数_.intersectionWith是在 lodash 4.0 中添加的,它应该完全按照你的意愿行事。按如下方式使用它:
var collection = [
{id:1, name:'one'},
{id:2, name:'two'},
{id:3, name:'three'}
];
var filter = [
{id:2, name:'two'}
];
// _.isEqual performs a deep comparison
_.intersectionWith(collection, filter, _.isEqual) // [{"id":2,"name":"two"}]
关于javascript - 其他集合的 lodash 过滤器集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876398/