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

Han*_*ans 8 javascript arrays comparison

假设我们有:

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];
Run Code Online (Sandbox Code Playgroud)

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

array3 = ['A', 'B', 'D']
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Han*_*ans 13

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

 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;
 } 
 }
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*hen 11

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

jQuery.grep(array1, function(el)
                    {
                        return jQuery.inArray(el, array2) == -1;
                    });
Run Code Online (Sandbox Code Playgroud)

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