[英]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.