【问题标题】:How to find common elements only between 2 arrays in jquery [duplicate]如何仅在jquery中的2个数组之间找到共同元素[重复]
【发布时间】:2014-04-05 11:13:57
【问题描述】:
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)。消息和差异元素收集将同时执行。

【问题讨论】:

  • 两个数组中的元素总是排序的吗?
  • 是的,通过其他一些过程,这些数组正在创建,它永远不会为空......谢谢!

标签: javascript jquery arrays


【解决方案1】:

试试这个:

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

【讨论】:

  • 我认为在 $.grep(a, function(element) 这里“a”将被“array1”替换
  • Coomon 部分工作正常......但其余部分,即差异不起作用
  • 我编辑了那部分也请检查。我现在把 array1 放在 array2 之前
  • 现在看看这个array3
  • array1 = [2, 2, 2, 5]array2 = [2, 2, 5, 5] 应该得到[2, 2, 5],但是使用上面的代码我们得到[2, 2, 2, 5]jsfiddle.net/mpaatc2n/1
【解决方案2】:

这是我的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, 2, 2][2, 5, 5] 时给我一个匹配的[2] 的函数。谢谢。
  • PS:不适用于diff([2, 2, 2, 5], [2, 2, 5, 5]),这将导致匹配[2, 2, 5, 5] 而不是预期的[2, 2, 5]jsfiddle.net/hrLHR/14
【解决方案3】:

如果你经常做这种事情,你可能会对一个让这种事情变得很容易的 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多