2016-11-17 384 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爲你的幫助 –