Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Javascript中的两个数组-返回差异_Javascript_Arrays_Comparison - Fatal编程技术网

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

比较Javascript中的两个数组-返回差异,javascript,arrays,comparison,Javascript,Arrays,Comparison,假设我们有: array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E']; 是否有一个经过验证的快速解决方案来比较两个数组,返回一个数组时两个数组中都没有出现值(这里是C和E)。 因此: 应该是解决方案的输出。(可能涉及jquery) thx.这是一个固定的差异。一个简单的实现是: jQuery.grep(array1, function(el) { re

假设我们有:

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];
是否有一个经过验证的快速解决方案来比较两个数组,返回一个数组时两个数组中都没有出现值(这里是C和E)。 因此:

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


thx.

这是一个固定的差异。一个简单的实现是:

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

这是O(m*n),其中这些是数组的大小。您可以在O(m+n)中完成,但需要使用某种哈希集。可以将JavaScript对象用作字符串的简单哈希集。对于相对较小的数组,上面的方法应该很好。

据我所知,一个行之有效的快速解决方案是二进制搜索,您可以在对其中一个数组排序后使用它。因此,解决方案需要时间,这取决于排序算法。但至少是log(N)。

我接受了马修斯的解决方案,但不想忽略我刚刚找到的另一个更快的解决方案

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

来源:

数组是否总是像您的示例中那样进行排序?如果是这样的话,只需遍历数组就可以在线性时间内完成。如果需要将其中一个列表(此处为list2)与许多候选列表(许多list1)进行比较,这一点尤其好。在Chrome上,链接源引用被发现为包含恶意代码,请考虑更新这个答案,使用ARARY.Type Type过滤器代替JQueR.GRIP,因为即使不允许JQuery,它也会提供一个解决方案。确实是一个没有图书馆的选择。但是,您也需要(而不是inArray)。但是,两者都需要在旧浏览器中加载polyfill(在链接中提供),以实现广泛的兼容性。因为这个问题允许jQuery,所以我选择了它,因为它有自己的polyfill。
 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;
 } 
 }