2016-11-17 562 views
9

我有两个对象数组:Lodash/javascript:比较两个集合并返回差异

我的表的元素不是原始值,而是复杂的对象。

array1 = [obj1,obj2,obj3,obj4] 
array2 = [obj5,obj5,obj6,obj7] 

我想比较两个阵列和看到阵列2的元件的已经存在于ARRAY1然后创建的差的一个新的数组。

有什么建议吗?

+0

是的,'_.difference' – georg

回答

10
var presents = _.intersectionWith(array1, array2, _.isEqual); 
var dif = _.differenceWith(array1, array2, _.isEqual); 
+0

_.differenceWith是只可用自4.0.0 lodash版本 –

4

ES6这将是不够的:

array2.filter(e => !array1.includes(e)); 

没有包括

array2.filter(e=> array1.indexOf(e) < 0); 

Plunker为您

+0

不能使用你的解决方案,因为我使用角度2与打字稿,包括返回一个错误 –

1

_.difference给你只有在第一个阵列但不在第二个阵列中的元素,没有任何关于阵列2中不在阵列1中的元素。

这是你想要实现的吗?

+0

是这就是我'正试图实现,但是当我使用_difference的情况下,我的两个数组是idantical我有array1作为输出!这是正常的吗? –

+0

不...应该发给你[](我已经在lodash文档中的chrome控制台上测试过了...)。你使用nodejs还是Web浏览器? –

+0

是的最后它工作正常,这是我犯的一个错误。 thx为你的帮助 –