javascript - 过滤重复项的最佳方法?
问题描述
我在尝试使用正则表达式之前发布了这个,但这次有点不同。
所以我有这个 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。
解决方案
不要试图一步完成所有事情。将您的问题分解成更小的块:
- 将 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);
推荐阅读
- java - ArrayList IndexOfBound 从firestore数据库获取数据时出现异常,为什么?
- activemq-artemis - ActiveMQ Artemis 上的“AMQ222196:找不到与...的绑定”警告的潜在原因是什么
- ios - 保存的对象数组未显示在新的 ViewController 中
- python - 这是一个有效的 YAML 文件吗?
- docker - 无法在 openshift 上部署 docker 映像
- mongodb - PDI MongoDB 输入和输出步骤
- javascript - 如果请求中有大块,Angular 8 无法读取响应
- reactjs - react-pdf中如何调用数据?
- jquery - 建立具有多种模式的 css 选择器路径
- vbscript - 经典 Asp cookie 过期日期并不总是设置