You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何匹配两个对象数组的手机号并生成带自定义字段的新数组

实现方案

首先将联系人数组转换为手机号为key的映射表,大幅提升匹配效率,避免每条消息都遍历整个联系人数组。完整实现代码如下:

// 1. 构建手机号到联系人姓名的映射表
const contactMap = new Map(contacts.map(contact => [contact.phoneNumber, contact.name]))

// 2. 遍历消息数组生成新数组
const newMessages = messages.map(msg => {
  // 优先匹配from字段,再匹配to字段,可按需调整顺序
  const matchName = contactMap.get(msg.from) ?? contactMap.get(msg.to)
  return {
    ...msg,
    displayName: matchName ?? msg.from
  }
})

逻辑说明

  • 用Map存储联系人映射后,单次匹配的时间复杂度为O(1),整体时间复杂度为O(n+m)(n为联系人数量,m为消息数量),远优于两层遍历的O(n*m)方案
  • 代码中使用空值合并运算符??做匹配判断,避免 falsy 值(比如联系人姓名为空字符串)导致的异常匹配,若你的运行环境不支持??,可以替换为||
  • 若需要优先匹配to字段而非from字段,只需要调换contactMap.get(msg.from) ?? contactMap.get(msg.to)的前后顺序即可
  • 实现过程不会修改原消息数组和联系人数组,符合纯函数的最佳实践

内容的提问来源于stack exchange,提问作者Zoot_00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:54:01