繁体   English   中英

在Javascript中比较两个数组 - 返回差异

[英]Comparing two arrays in Javascript - Returning differences

假设我们有:

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];

有没有一个经过验证的快速解决方案来比较两个数组,返回一个数组,而两个数组中都没有出现值(这里是C和E)。 所以:

array3 = ['A', 'B', 'D']

应该是解决方案的输出。 (可能涉及jquery)

谢谢。

我接受了马修斯解决方案,但不想忽略我刚刚发现的另一种更快的解决方案。

 var list1 = [1, 2, 3, 4, 5, 6];
 var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
 var lookup = {};

 for (var j in list2) {
      lookup[list2[j]] = list2[j];
  }

  for (var i in list1) {
      if (typeof lookup[list1[i]] != 'undefined') {
          alert('found ' + list1[i] + ' in both lists');
          break;
 } 
 }

来源: 优化循环以比较两个阵列

这是一个集合差异。 一个简单的实现是:

jQuery.grep(array1, function(el)
                    {
                        return jQuery.inArray(el, array2) == -1;
                    });

这是O(m * n),其中那些是数组的大小。 可以在O(m + n)中执行此操作,但您需要使用某种哈希集。 您可以将JavaScript对象用作字符串的简单哈希集。 对于相对较小的阵列,上述应该没问题。

我所知道的一个经过验证的快速解决方案是二进制搜索,您可以在对其中一个阵列进行排序后使用它。 所以解决方案需要的时间取决于排序算法。 但至少是log(N)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM