如何在jquery中找到2个数组之间的公共元素

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

我有两个像上面这样的数组。 现在我想在MVC 4中使用jQuery执行以下操作。

  1. 如果两个数组的每个元素都相等,则显示消息/警报。 例如“所有记录已经存在。”

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

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

试试这个:

  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]; 

这是我的版本

 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); } 

如果你经常做这种事情,你可能会对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/