有两个对象数组,一个来自数据库,另一个来自csv。我需要通过电话和电子邮件的相对属性比较两个数组对象,并在它们中找到重复的数组。由于奇怪的数据库对象结构,我需要将这两个数组与Javascript进行比较。我想知道什么是最好的算法和比较的最佳方法,并找到重复?
我解释简单的计算。 我的数据库中有5000个联系人,用户可以从csv上传另外3000个联系人。每当我们需要从数据库中找到重复的联系人时,如果他们找到,那么它可能会覆盖并且应该插入休息。如果我逐行比较联系人,那么它可以循环 5000个数据库联系人x 3000个csv联系人= 15000000时间遍历。 这是我目前的情况,因为这个系统陷入困境。我需要一些有效的解决方案来解决这个问题。
我在NodeJS,RethinkDB中开发了这些东西。
数据库对象结构完全代表这种方式,它也可以复制其他联系人中的电子邮件和手机条目。
[{
id: 2349287349082734,
name: "ABC",
phones: [
{
id: 2234234,
flag: true,
value: 982389679823
},
{
id: 65234234,
flag: false,
value: 2979023423
}
],
emails: [
{
id: 22346234,
flag: true,
value: "test@domain.com"
},
{
id: 609834234,
flag: false,
value: "test2@domain.com"
}
]
}]
如果您需要,请查看小提琴代码:https://jsfiddle.net/dipakchavda2912/eua1truj/
我已经做过索引了。这个问题看起来非常简单,一见钟情,但当我们谈论并发性时,它确实非常关键且CPU密集。
答案 0 :(得分:0)
如果您能理解这个问题,可以使用 lodash 方法 differenceWith
let csvContacts = [] //fill it with your values;
let databaseContacts = .... //from your database
let diffArray = [] //the non duplicated object;
const l = require("lodash");
diffArray = l.differenceWith(csvContact,
databaseContacts,
(firstValue,secValue)=>firstValue.email == secValue.email