【问题标题】:Lodash search array item in other array itemLodash 在其他数组项中搜索数组项
【发布时间】:2017-12-10 19:03:28
【问题描述】:

您好,我正在使用 lodash 库。

我想搜索 receivedMessagesMock 中的手机是否在 contactsMocks 手机中

如果 receivedMessagesMock.phone === contactsMocks.phoneNumbers.value 我需要将 contactsMocks.name.formatted 推送到相同的 receivedMessagesMock 位置。

有点像

if(receivedMessagesMock[0].phone === contactsMocks.phoneNumbers.value {
 receivedMessagesMock[0].name = contactsMocks.name.formatted;
}

contactMock 和 receivedMessagesMock

var contactsMock = [{'id':'1','rawId':'1','displayName':'Asd','name':{'givenName':'Asd','formatted':'Asd'},'nickname':null,'phoneNumbers':[{'id':'1','pref':false,'value':'000000000','type':'mobile', 'loggedInSystem':true}],'emails':null,'addresses':null,'ims':null,'organizations':null,'birthday':null,'note':null,'photos':null,'categories':null,'urls':null},{'id':'2','rawId':'2','displayName':'Bbb','name':{'givenName':'Bbb','formatted':'Bbb'},'nickname':null,'phoneNumbers':[{'id':'3','pref':false,'value':'565 65 65 65','type':'mobile'}],'emails':null,'addresses':null,'ims':null,'organizations':null,'birthday':null,'note':null,'photos':null,'categories':null,'urls':null},{'id':'3','rawId':'3','displayName':'Ccc','name':{'givenName':'Ccc','formatted':'Ccc'},'nickname':null,'phoneNumbers':[{'id':'5','pref':false,'value':'0000000001','type':'mobile'}],'emails':null,'addresses':null,'ims':null,'organizations':null,'birthday':null,'note':null,'photos':null,'categories':null,'urls':null},{'id':'4','rawId':'4','displayName':'Ddd','name':{'givenName':'Ddd','formatted':'Ddd'},'nickname':null,'phoneNumbers':[{'id':'6','pref':false,'value':'000 00 00 01','type':'mobile'}],'emails':null,'addresses':null,'ims':null,'organizations':null,'birthday':null,'note':null,'photos':null,'categories':null,'urls':null}];

    var receivedMessagesMock = [{
        'id': 12,
        'phone': '000 00 00 01',
        'time': '15:44',
        'priority': 1,
        'response' : false
    },{
        'id': 15,
        'phone': '000 00 00 01',
        'time': '15:44',
        'priority': 1,
        'response' : false
    },{
        'id': 16,
        'phone': '000 00 00 01',
        'time': '15:44',
        'priority': 2,
        'response' : true
    }
    ];

【问题讨论】:

  • 问题/问题是?

标签: javascript angularjs arrays search find


【解决方案1】:

这是使用 lodash 的一种方法:

lodash.map(receivedMessagesMock, function(rmm) {
  var foundContact = lodash.find(contactsMock, function(cm) {
    return lodash.find(cm.phoneNumbers, function(pn) {
      return pn.value == rmm.phone;
    });
  });
  if (foundContact) {
    rmm.names = foundContact.name.formatted
  }
  return rmm;
});

请记住,您要求在收到的消息中插入一个名称(单数)。这意味着如果列表中的两个或多个联系人具有相同的号码,无论出于何种原因,上述内容将始终返回第一个匹配项。但是确实有可能会有多个匹配项,因此插入一个名称数组可能是合适的。

lodash.map(receivedMessagesMock, function(rmm) {
  var foundContacts = lodash.filter(contactsMock, function(cm) {
    return lodash.find(cm.phoneNumbers, function(pn) {
      return pn.value == rmm.phone;
    });
  });
  if (foundContacts.length > 0) {
    rmm.names = lodash.map(foundContacts, function(fcs) {
      return name.formatted
    });
  }
  return rmm;
});

【讨论】:

  • 你拯救了我的一天@JoelCDoyle。谢谢你的时间:)
  • 你好 @JoelCDoyle 如果 pn.value != rmm.phone;返回 pn.value ¿?
  • 我不确定您所说的“返回电话号码”是什么意思。 pn 仅在定义它的 lodash.find 谓词函数的上下文范围内。该函数的返回语句将被评估为布尔值以确定它是否匹配,仅此而已。
  • 当 pn.value == rmm.phone 不正确时,我希望 'name.formatted' = 到 pn.value
猜你喜欢
  • 1970-01-01
  • 2015-10-23
  • 2012-05-01
  • 2021-11-16
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 1970-01-01
相关资源
最近更新 更多