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

时间:2014-03-04 04:44:50

标签: javascript jquery arrays

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)。消息和差异元素集合都将同时执行。

3 个答案:

答案 0 :(得分:29)

  

试试这个:

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

答案 1 :(得分:6)

这是我的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);
    }

答案 2 :(得分:5)

如果您经常这样做,您可能会对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();

开源Set对象(一个简单的源文件)位于:https://github.com/jfriend00/Javascript-Set/blob/master/set.js

除了此处使用的intersection()方法外,它还具有各种其他集合操作(​​并集,差异,子集,超集,添加,删除......)。

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