2014-07-18 148 views
0

Underscore为数组交集,差异和联合提供了方便的函数。但是它们不能像预期的那样工作在一组对象上:对于数组对象的下划线数组操作

var first = {val: 1}; 
var otherFirst = {val: 1}; 
var second = {val: 2}; 
_.difference([first, second], [otherFirst]); // result is [first, second] instead of [second] 

发生这种情况是因为JS检查了引用相等的对象。我怎样才能交叉两个对象数组?

我正在寻找某种惯用的解决方案。

回答

2

我有些东西可以用于两个数组。

_.filter([first,second], function(obj){ 
    return !_.findWhere([otherFirst], obj); 
}); 

基本上它是什么东西它检查array1中的对象是否不存在array2过滤器。

+0

我也有同样的解决方案,但拒绝,但+1,感谢 – kharandziuk

0

使用remove将工作:

_.remove([first, second], otherFirst) 
+0

当在第二个数组包含多个元素是它的工作原理? – kharandziuk

+0

不,那需要一个明确的回调。我只注意到下划线实际上甚至没有'remove'方法,它是特定于lodash的方法。 – Bergi