在大多数键匹配的两个对象数组中查找匹配项

时间:2017-12-21 19:16:30

标签: javascript jquery

我正在尝试协调2个联系人列表,这样就意识到较新的列表可能会有更改应该应用于旧列表,并试图弄清楚如何找到这些匹配。我有两个表示联系人的对象数组。第一个是我当前的联系人列表,第二个是可能的新联系人列表。新联系人可能与当前联系人匹配。但是,这些匹配可能会更改一个或两个项目,例如地址和电话号码。甚至名字也可能改变。有没有办法比较两个数组,如果给定对象的Y键值中的X匹配并知道哪两个匹配?

  var currentClients = [
    {id:1, name:'Sarah maiden', email:'sarah@sampleemail.send', phone: 12345, address:'123 My Address Way', birthday:'1/2/1980'},
    {id:2, name:'Mark', email:'mark@sampleemail.send', phone: 97678, address:'582 My Address Way'},
    {id:3, name:'Mike', email:'mike@sampleemail.send', phone: 86468, address:'3646 My Address Way'},
    {id:4, name:'Susan', email:'special@sampleemail.send', phone: 68426, address:'4 My Address Way'},
    {id:5, name:'Tiffany', email:'yayt@sampleemail.send', phone: 2672, address:'9 My Address Way'},
    {id:6, name:'Pat', email:'hey@sampleemail.send', phone: 1622, address:'628962 My Address Way'},
    {id:7, name:'Buddy', email:'mahbud@sampleemail.send', phone: 27269, address:'25 My Address Way'}
  ];

  var newClients = [
    {id:11, name:'Sarah married', email:'sarah@sampleemail.send', phone: 12345, address:'123 My Address Way'},
    {id:12, name:'Bloke', email:'bloke@sampleemail.send', phone: 5555, address:'628962 Different Address Way'},
    {id:13, name:'Harry', email:'harry@sampleemail.send', phone: 2222, address:'3646 Different Address Way', birthday:'12/22/2002'},
    {id:14, name:'Sally', email:'meg@sampleemail.send', phone: 3333, address:'4 Different Address Way', birthday:'12/21/2002'},
    {id:15, name:'Larry', email:'wait@sampleemail.send', phone: 4444, address:'9 Different Address Way'},
    {id:16, name:'Mark', email:'mark@sampleemail.send', phone: 111, address:'582 NEW Way'},
    {id:17, name:'Paul', email:'niceguy@sampleemail.send', phone: 6666, address:'25 Different Address Way'}
  ];

使用上面的数组我想循环遍历newClients并知道何时(如果)一个匹配除了两个名称,电子邮件,电话,地址和/或生日密钥与currentClients。函数可以返回currentClient对象或索引。请注意,某些键(例如,生日)可能没有值,因此如果缺少某个值,则会忽略这些值,否则将使用这些值。

我想要匹配其中任何一个,除了我知道我有客户分享其中一些,如电子邮件,地址,电话。我希望每个人都有一个记录,所以只匹配一个项目将无法正常工作,因为任何可能无法共享的东西都很容易被改变(名字 - 已婚/离婚等)或一个人为的项目(他们的身份),在代码之外没有任何意义两者之间没有真正的联系。

所以在上面的数组中,我希望在我的样本中将ID为1的对象与ID为11且ID为ID为16的对象进行匹配。我的最终目标是更改不同的当前项目以匹配新值。一旦我有了这个匹配并且知道哪个当前项目可以用哪个新项目进行编辑,我可以处理其余的。是的,我也在添加不匹配的项目,但这部分很容易。如果没有这些可能的改变值,我会完成。我已经做了一些搜索来解决这个问题,但我认为我没有使用正确的条款,因为我没有找到答案。我想也许是一些array.filter()但是仍然没有把我的脑袋包围着以下两个以外的所有

1 个答案:

答案 0 :(得分:0)

http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html 请参阅这篇文章。你需要比较对象的值。