如何在JavaScript中获得差异btw两个数组?

问题描述:

我有一个数组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://*.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

当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

你可以得到它象下面这样:

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