javascript - 其他集合的 lodash 过滤器集合

标签 javascript collections filtering lodash

我已经研究了几天,觉得我在这里缺少一个明显的实现。

(有关类似内容,请参阅 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/

相关文章:

javascript - 更改 img src 和宽度

java - 我们怎么知道应用了某种方法?

java - 订购另一个人的 Collection

python - 20hz-20000hz巴特沃斯滤波爆炸式

android - 使用 SimpleAdapter 过滤 listView 数据

javascript - 如何正确地从 navigator.geolocation 调用 stopObserving()?

javascript - 单击链接时如何选择同级元素?

javascript - 为什么我的按钮对 php 和 javascript 不起作用,而我的其他按钮却起作用?

java - 如何使用HashMap模拟缓存

python - 过滤SQLAlchemy查询结果对象的一对多属性