针对对象数组的下划线数组操作

时间:2014-07-18 11:59:53

标签: javascript arrays underscore.js

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 个答案:

答案 0 :(得分:2)

我有一些可以用于两个阵列的东西。

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

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

答案 1 :(得分:0)

使用remove将起作用:

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