Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Compare_Logic_Frontend - Fatal编程技术网

Javascript 筛选重复项的最佳方法?

Javascript 筛选重复项的最佳方法?,javascript,arrays,compare,logic,frontend,Javascript,Arrays,Compare,Logic,Frontend,在尝试使用正则表达式之前,我发布了这方面的信息,但这次有点不同 所以我有500个电话号码的清单。以下是其中的一个小示例: { 8664665844 8885444636 8664604776 8776434327 8887441938 8882642882 8888097429 8668943258 8777711234 8669894327 } 它看起来有点不同,这是在我的mongoDB服务器上,所以它更像是一个

在尝试使用正则表达式之前,我发布了这方面的信息,但这次有点不同

所以我有500个电话号码的清单。以下是其中的一个小示例:

{
    8664665844
    8885444636
    8664604776
    8776434327
    8887441938
    8882642882
    8888097429
    8668943258
    8777711234
    8669894327
}
它看起来有点不同,这是在我的mongoDB服务器上,所以它更像是一个具有唯一uid的对象数组。。。例如:

[
    {
        _id: kasjf234lkj109euf9023u4n,
        field1: 8669894327,
    }
]
差不多吧

所以基本上,我的webapp使用的是一个csv文件,其中包含你想要与你的基本数字进行比较的数字

我的第一个想法是使用for、while、for循环之类的东西,但我不确定它的效果如何:

for(var i = 0; i < basenums.length; i++){
    while ( i >= 0 ){
        for(var j = 0; j < comparing.length; j++){
            if comparing[j] == basenums.field1[i]{
                push that number to a 'dupes' array
            }else{
                break or something?
            }
        }
    }
}    
for(变量i=0;i=0){
对于(var j=0;j<0.length;j++){
如果比较[j]==basenums.field1[i]{
将该数字推送到“重复”数组
}否则{
休息还是什么?
}
}
}
}    
…这种逻辑开始伤害我的头

我知道有一个“includes()”方法,但我并没有真正使用它,当我在本例中尝试它时,它给出的所有结果都是错误的,即使我用来比较的列表只是我服务器上“basenums”列表的一个副本

更“正确”的做法是什么

我试图将数组与数组进行比较。不是其特定数组中的值,而是它自己的数组

因此,与其将其标记为副本,不如重新阅读:


我有两个数字数组:[1,2,3,4,5,6]和[1,2,3,4,5,6]如何获取数组a的索引0并将其与数组b的每个索引进行比较,然后获取数组a的索引1并与数组b中的每个索引进行比较,依此类推,直到I>arrayA.length。

不要试图在一步中完成所有操作。把你的问题分成小块:

  • 将mongo的响应格式化为可以高效查询的哈希映射(O(1))
  • 根据此映射测试每个输入编号
  • 步骤1:

    var hashmap = {}
    basenums.forEach(function(basenum) {
      hashmap[basenum.field1] = true;
    })
    
    步骤2:

    var dupes = [];
    comparing.forEach(function(comparingNum) {
      if(hashmap[comparingNum]) {
        dupes.push(comparingNum);
      }
    })
    
    编辑:我不确定是否要将复制品作为一个集合(唯一阵列)。如果是这样,您可以使用备用步骤2:

    var dupesMap = {};
    comparing.forEach(function(comparingNum) {
      if(hashmap[comparingNum]) {
        dupesMap[comparingNum] = true;
      }
    })
    var dupes = Object.keys(dupesMap);
    

    您可以将值推入数组,并使用该数组创建一个新集合。集合中不保留冗余元素。试试这个

    let a = ["a","b","a","b","a","b","a","b","a","c"];
    console.log(a);
    let uniqueA = [...new Set(a)];
    console.log(uniqueA);
    

    顺便说一句,对于这段代码,我从这个页面得到了一个帮助:

    这会起作用,但我有arrayA和arrayB,我宁愿暂时保持这种方式。嗯。。我将对此进行一点探讨。它似乎会起作用,但老实说,我几乎不了解这里发生了什么……对象“hashmap”到底是什么。。?在JavaScript中,任何对象(
    {}
    )都是一个映射-一个键/值存储。在本例中,我称之为hashmap。我也可以叫它kownNumberStore或类似的东西。接下来,我将构建一个类似于
    {'8664665844':true,'8885444636':true}
    的映射/对象,以便我可以通过
    hashMap['8885444636']
    询问该对象是否存在具有该数字的条目/值。它并没有做更多的事情——它只是作为一个查找工具。只是说得清楚一点,我必须制定搜索数组的逻辑,是吗?因为一切都是真实的。lolThis似乎不起作用,虽然我不知道为什么。。。hashmap使用“basenum”的键值对创建和创建对象:如它所说的那样为true。但是,它似乎没有进入第二个forEach循环。。我想我将使用单独的方法,然后再试一次。是的,无论出于什么原因,它似乎不会进入下一个forEach循环。在比较数组时查找匹配的情况下。应该采取什么行动?DupeArray.push(foundDupe)