2014-12-04 79 views
0

我有一個數組a = [1,2,3,4,5] b = [3,4,5,6,7]如何在JavaScript中獲得差異btw兩個數組?

這裏我想要數組a [1,2]和數組的值b [6,7]並存儲在如下所示的diff數組中。

C = [1,2] d = [6,7]

由於提前。

其狀如= [chkbx_705_49,chkbx_706_49,chkbx_707_49,chkbx_708_49,chkbx_709_49,chkbx_710_49,chkbx_711_49,chkbx_712_49,chkbx_714_49,chkbx_705_50,chkbx_706_50,chkbx_707_50,chkbx_708_50,chkbx_709_50,chkbx_710_50,chkbx_711_50,chkbx_705_51,chkbx_706_51,chkbx_707_51,chkbx_708_51,chkbx_711_51 ,chkbx_710_52,chkbx_711_52,chkbx_710_53,chkbx_711_53]

b = [chkbx_705_49,chkbx_705_50,chkbx_705_51,chkbx_705_52,chkbx_705_53,chkbx_706_49,chkbx_706_50,chkbx_706_51,chkbx_706_52,chkbx_706_53,chkbx_707_49,chkbx_707_50,chkbx_707_51,chkbx_708_49,chkbx_708_50,chkbx_708_51,chkbx_709_49, chkbx_709_50,chkbx_710_49,chkbx_710_50,chkbx_711_49,chkbx_711_50,chkbx_711_51,chkbx_712_49]

這裏我刪除chkbx_710_52,chkbx_711_52,chkbx_710_53,chkbx_711_53複選框值從陣列的

並加入chkbx_705_52,chkbx_705_53,chkbx_706_52,chkbx_706_53在數組b加入。

所以我想C = chkbx_710_52,chkbx_711_52,chkbx_710_53,chkbx_711_53

d = chkbx_705_52,chkbx_705_53,chkbx_706_52,chkbx_706_53

+0

在[此帖](http://stackoverflow.com/questions/7958292/mimicking-sets-in-javascript/描述的預建組對象7958422#7958422)和[在GitHub上](https://github.com/jfriend00/Javascript-Set/blob/master/set.js)有各種分析對象集合的方法,比如你的數組:'。差異()','.union()','。intersection()','.isSubset()','.isSuperSet()',等等......你可以使用它們或者看代碼的工作方式。 – jfriend00 2014-12-04 05:41:49

回答

2

當A的成員也存在於B,刪除在兩個:

var a = [1,2,3,4,5]; 
var b = [3,4,5,6,7]; 

var c = a.slice(); 
var d = b.slice(); 
var len = c.length; 

while(len--) { 
    var idx = d.indexOf(c[len]); 
    if (idx > -1) { 
    c.splice(len, 1); 
    d.splice(idx, 1); 
    } 
} 

但是,你沒有說是否有重複的成員,所以我假設不,並以最簡單的方式做,只是爲了給你一個解決方案的想法。

+0

這兩個數組(3,4,5)都有重複,我只想回顧c = [1,2] d = [6,7]的值 – kiranstack 2014-12-04 07:38:13

+0

不,我的意思是我假設你沒有重複一個數組,例如'a = [1,2,3,3,4,5]'。但是,刪除數組中的重複是另一個問題,所以我跳過它。 – Leo 2014-12-04 08:03:25

+0

試試我的代碼,它適用於您的示例。 – Leo 2014-12-04 08:04:43

1

你可以得到它象下面這樣:

var array1 = [1,2,3,4,5]; 
var array2 = [3,4,5,6,7]; 
var foo1 = [], foo2=[]; 
var i = 0; 
jQuery.grep(array1, function(el) { 

    if (jQuery.inArray(el, array2) == -1) foo1.push(el); 
    i++; 

}); 
jQuery.grep(array2, function(el) { 
    if (jQuery.inArray(el, array1) == -1) foo2.push(el); 
    i++; 
}); 
alert(" the difference is " + foo1); 
alert(" the difference is " + foo2); 
+2

這不是一個帶有jQuery標籤的問題。 – jfriend00 2014-12-04 05:46:22