首页 > 解决方案 > 过滤重复项的最佳方法?

问题描述

我在尝试使用正则表达式之前发布了这个,但这次有点不同。

所以我有这个 500 个电话号码的列表。以下是其中的一些示例:

{
    8664665844
    8885444636
    8664604776
    8776434327
    8887441938
    8882642882
    8888097429
    8668943258
    8777711234
    8669894327
}

它看起来有点不同,这是在我的 mongoDB 服务器上,所以它更像是一个具有唯一 uid 的对象数组......例如:

[
    {
        _id: kasjf234lkj109euf9023u4n,
        field1: 8669894327,
    }
]

类似的东西。

所以基本上,我的 web 应用程序正在使用一个 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?
            }
        }
    }
}    

......这个逻辑开始让我头疼......

我知道有一个 'includes()' 方法,但我并没有真正使用它,当我在这种情况下尝试它时,它给了我一切都是假的,即使我用来比较的列表只是我的副本我的服务器上的“basenums”列表。

这样做更“正确”的方法是什么?

我正在尝试将数组与数组进行比较。不是其特定数组中的值到其自己的数组。

因此,与其将其标记为重复,也许您应该重新阅读:

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

标签: javascriptarrayscomparelogicfrontend

解决方案


不要试图一步完成所有事情。将您的问题分解成更小的块:

  1. 将 mongo 的响应格式化为可以有效查询的哈希映射 (O(1))
  2. 对照此地图测试每个输入数字

步骤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);

推荐阅读