Javascript 比较两个阵列的有效方法

Javascript 比较两个阵列的有效方法,javascript,algorithm,data-structures,Javascript,Algorithm,Data Structures,我使用两个数组来完成检查array1中的值是否存在于array2中的任务。如果是,请删除array1中的内容,并继续检查,直到array1为空。如果它们不存在,只需从函数返回即可。我正在使用Javascript 我使用经典的two for循环实现了它,该循环的运行时间为o(n*2)。我想知道是否有其他有效的方法来使用javascript支持的任何其他数据结构执行此操作。下面是我当前的实现 for(var j = 0; j < tempArray.length; j++){ for

我使用两个数组来完成检查array1中的值是否存在于array2中的任务。如果是,请删除array1中的内容,并继续检查,直到array1为空。如果它们不存在,只需从函数返回即可。我正在使用Javascript

我使用经典的two for循环实现了它,该循环的运行时间为o(n*2)。我想知道是否有其他有效的方法来使用javascript支持的任何其他数据结构执行此操作。下面是我当前的实现

for(var j = 0; j < tempArray.length; j++){
     for(var k = 0; k < this.probsSolved.length; k++){
         if(tempArray[j] == this.probsSolved[k]){
             tempArray.splice(j,1);            
             if(tempArray.length <= 0){
                 this.updateAchievements(achID);
                 this.storage.set(achKey,1);
                 return;
             }         
     }
}
for(var j=0;jif(tempArray.length将
array2
的元素放入字典数据结构(以确保快速查找)可能会有所帮助

在伪代码中,我将采用以下方法:

dict = {}

foreach elem in array2:
    insert elem in dict

foreeach elem in array1:
    if elem in dict:
        remove elem from array1

添加另一个答案,因为这仍然与我们中的许多人相关。我在寻找一种方法来优化脚本时发现了这个问题,该脚本比较了两个数组,其中两个数组都有上万个键

在我的情况下,它是Google脚本的一部分,并且超过了典型数据集的最大执行时间(约5分钟)。进行以下更改将执行时间减少到10秒以下

无效比较(最大i*j迭代次数):

有效比较(最大i+j迭代次数)


可以在此处找到:

数组中的元素类型是什么?数组是否按特定顺序排列?建议的字典方法是一种很好的方法。另一种方法是对两个列表进行排序,然后按照顺序进行遍历,就像进行标准合并一样。也就是说,如果列表不是很大,那么您的“效率低下”方法将足够快。我的列表包含整数值,它们最多包含50个值,但问题是我必须每5秒运行一次此操作。因此,搜索实际上每5秒进行一次,直到第一个列表变为空。我会查看字典,虽然数组的最大大小为50,但你说的最多为2500次迭代。所需的时间将以毫秒为单位。每五秒钟做一次完全没有问题。谢谢。
有意义!
否则:返回“不相等”
。最后:
如果dict不为空:返回“不相等”
谢谢,我将尝试使用这个想法!
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];

for (var i in list1) {
    for (var j in list2) {
        if (list1[i] == list2[j]) {
            alert('found ' + list1[i] + ' in both lists');
        }
    }
}
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;
    } 
}