如何在两个对象数组

时间:2017-10-24 16:13:10

标签: javascript node.js performance csv rethinkdb

有两个对象数组,一个来自数据库,另一个来自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密集。

1 个答案:

答案 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