javascript - 在两个数组javascript之间查找重复项的最快方法

标签 javascript arrays duplicates

有很多关于在两个数组中查找重复项的最简单方法的帖子,但是绝对最快的方法是什么?有没有一种方法可以避免使用两个 for 循环并使函数从 O(n^2) 时间到 O(n) 时间?我拥有的数组每个包含约 1000 个项目。在运行该函数之前,我检查哪个数组更长,并将该数组用作 toCheckAgainst 变量。

var containingBoth = [];
function checkArrays(toCheck, toCheckAgainst){
 for(var i=0;i<toCheck.length;i+=1){
  for(var j=0;j<toCheckAgainst.length;j+=1){
    if (toCheck[i] === toCheckAgainst[j]) {
      containingBoth.push(toCheck[i]);
    }
   }
  }
 }

最佳答案

这可能是实现此目的的另一种方法。您当前的解决方案在两个数组上循环并在最长的数组上循环,这会减慢大型数组中的过程,例如,如果一个最长的数组有 1000 个值,而较短的数组有在这种情况下只有 2 个,您正在循环 1000 个值以找出在这种情况下不能超过 2 个的重复项。

下面的解决方案循环仅在比另一个数组短的数组上,因为我们只对重复对象感兴趣,即使两个数组的长度相同,下面的解决方案也更快,因为在您的解决方案中,您在两个数组上循环,而下面代码只是循环一个。

是否进行了一些关于比较 Niles 代码和我的速度差异的测试,请在此处查看结果 Niles Codemy code并且每个 1000 个值的数组快大约 50%

var arr1 = ["Test1", "test2", "test3","test5","test6","test4"];
var arr2 = ["test1", "test4","test5","test6","test2","Test1"];
var result = [];
(arr1.length>arr2.length?arr2:arr1).forEach(function(key) {
    if (-1 != (arr1.length>arr2.length?arr1:arr2).indexOf(key) && -1 == result.indexOf(key)) 
        result.push(key);
}, this);
alert(result); //duplicate values arr

关于javascript - 在两个数组javascript之间查找重复项的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620426/

相关文章:

mysql - 在 MySQL SELECT 查询中生成重复响应

php - 处理数据服务器端与客户端

javascript - 如何在 moz 扩展页面上执行用户脚本?

java - 如何用不同的方法打印数组?

javascript - 如何将字符串添加到数组?

python - 迭代同一个列表两次并避免在 python 中重复

javascript - 请求前清除之前的数据

javascript - 当更新的数据有附加部分时添加新路径

java - div标签不显示任何结果

javascript - 如何使用对象和键将数组与多维数组组合起来