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