2014-03-04 93 views
6
var array1 = [1, 2, 3, 4, 5, 6]; 
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

我有两个类似上面的数组。现在我想用jQuery在MVC 4中进行以下操作。如何在jQuery中找到仅在2个数组之间的公共元素

  1. 如果两个阵列的每个元素都相等,则显示一条消息/提醒。例如“所有记录已经存在。”

  2. 如果两个阵列的每个元素不同,那么只需将它们全部添加到“VAR”中,例如, var resultset = ....(其中7,8,9将被存储)

  3. 如果两个数组之间很少有共同的元素,那么对于公共元素显示带有元素的消息,例如, “记录1,2,3,4,5,6已经存在”并在“VAR”中添加不同的元素,例如, var resultset = ....(其中7,8,9将被存储)。消息和差异元素集合将同时执行。

+0

两个数组中的元素是否总是排序? – Leo

+0

是的,通过其他一些过程这些数组正在创建,它永远不会是空的......谢谢! – Monibrata

回答

25

试试这个:

var array1 = [1, 2, 3, 4, 5, 6], 
    array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

var common = $.grep(array1, function(element) { 
    return $.inArray(element, array2) !== -1; 
}); 

console.log(common); // returns [1, 2, 3, 4, 5, 6]; 



var array3 = array2.filter(function(obj) { return array1.indexOf(obj) == -1; }); 

// returns [7,8,9]; 
+0

我认为在$ .grep(一个函数(元素)在这里“a”将被替换为“array1” – Monibrata

+0

是的,这是我的错误,我现在纠正它,请检查 –

+0

委内瑞拉部分工作正常...但其余即差异不起作用 – Monibrata

5

这里是我的version

function diff(arr1, arr2) { 
     var obj = {}, matched = [], 
      unmatched = []; 
     for (var i = 0, l = arr1.length; i < l; i++) { 
      obj[arr1[i]] = (obj[arr1[i]] || 0) + 1; 
     } 
     for (i = 0; i < arr2.length; i++) { 
      var val = arr2[i]; 
      if (val in obj) { 
       matched.push(val); 
      } else { 
       unmatched.push(val); 
      } 
     } 
     // Here you can find how many times an element is repeating. 
     console.log(obj); 
     // Here you can find what are matching. 
     console.log(matched); 
     // Here you can check whether they are equal or not. 
     console.log('Both are equal ? :' + 
     matched.length === a.length); 
     // Here you can find what are different 
     console.log(unmatched); 
    } 
+0

可爱的这是唯一的功能当我比较'[2,2,2]'与'[2,5,5]'时,我发现它给了我一个匹配的[2]。谢谢。 –

+0

PS:不适用于diff([2,2,2,5],[2,2,5,5]),这会导致匹配[2,2,5,5]而不是预期的'[2,2,5]'。 http://jsfiddle.net/hrLHR/14/ –

2

如果你经常做这样的事情,你可能有兴趣在一个Set对象使这种东西很容易:

var array1 = [1, 2, 3, 4, 5, 6]; 
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
var common = new Set(array1).intersection(array2).keys(); 

开放源代码设置对象(一个简单的源文件)是在这里:https://github.com/jfriend00/Javascript-Set/blob/master/set.js

随着这里使用的intersection()方法,它有各种其他的集合操作(​​并,差,子集,超集,加, 去掉 ...)。

工作演示:http://jsfiddle.net/jfriend00/5SCdD/

相关问题