2014-03-04 54 views
-1

我有一個初始數組,然後我添加了一些新的元素,並刪除了一些現有的元素。什麼是最好的方式來比較2個數組新的和刪除的元素?

現在什麼是最好的方法來比較改變的數組與原始數組,以確定什麼是添加和什麼被刪除?

+0

在另一個數組上使用帶'.indexOf'謂詞的'.filter'。 –

+0

你有什麼試過的,你能舉個例子嗎?你的解決方案有問題嗎? – Xotic750

回答

1

那麼,如果你想看到添加的項目,你需要找到現有項目和第二個數組中不存在的差異。

讓我們打電話給第一個陣列 - A和第二個 - B

所以現在刪除的項目將是difference(A, B)並插入項目將是difference(B, A)

如果您使用underscore.js你可以簡單地做這樣的:

var removed = _(A).difference(B); var added = _(B).difference(A);

例如,你有這麼A = [1,2,3,4]; B = [3,4,5,6];那麼removed將包含[1, 2]added將包含[5, 6]

編輯 當然你也可以編寫自己的difference()但使用underscore.jslodash已經證明了他們的可用性在我的實踐。當然,如果你想引用的詳細信息,然後看看

Filter Option in javascript

並申請而過濾你的邏輯,你可以隨時使用filter()reduce()

+0

與過濾器功能結合使用的差分邏輯工作。 函數差(arrayA,arrayB){ \t變種的diff = arrayA.filter(函數(項目,i)的{ \t \t返回arrayB.indexOf(項目)=== -1; \t \t }); \t return diff; } var A = [1,3,4,5],B = [1,2,4,6]; var a_minus_b =差異(A,B); var b_minus_a =差異(B,A); console.log(a_minus_b); //已刪除3,5 console.log(b_minus_a); //增加2,6 –

+0

另外ExtJS提供了Ext.Array.difference(array1,array2)方法。 –

1
OrignalArray = OrignalArray.filter(function(val) { 
    return ModifiedArray.indexOf(val) == -1; 
}); 

相關問題