筛选重复项的最佳方法?

时间:2018-09-04 14:23:02

标签: javascript arrays compare logic frontend

我在尝试使用正则表达式之前发布了有关此内容的信息,但是这次有所不同。

所以我有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]如何获取数组索引0并将其与数组比较b每个索引,然后取数组a的索引1并与数组b中的每个索引进行比较,依此类推,直到i> arrayA.length。

2 个答案:

答案 0 :(得分:1)

不要尝试一步完成所有操作。将您的问题分解成小块:

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

答案 1 :(得分:0)

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

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

顺便说一下,我在此页面上获得了一段代码的帮助:https://medium.com/front-end-hacking/getting-unique-values-in-javascript-arrays-17063080f836