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

如何转换映射:将值转为键并合并关联值为数组存入对应键

数据整合与格式转换方案

需求说明

整合三组数据,将names数组中的name字段作为对象键,把关联的phoneNumbers中的phoNumb字段整理为数组存入对应键,最终得到指定格式的结果。

原始数据

const names= [
  { id: 1, name: 'JULIO FONTOVA' },
  { id: 2, name: 'CHRISTIAN JONES' },
  { id: 3, name: 'MARK DAVIES' }
];

const nexus = [
  { namesId: 1, phoNumbId: 1, country: 'PERU', mount: 1200 },
  { namesId: 1, phoNumbId: 2, country: 'CANADA', mount: 2000},
  { namesId: 2, phoNumbId: 2, country: 'ENGLAND', mount: 3000},
  { namesId: 2, phoNumbId: 3, country: 'RUSSIA', mount: 40000},
  { namesId: 3, phoNumbId: 1, country: 'BELGIUM', mount: 500},
  { namesId: 3, phoNumbId: 2, country: 'SPAIN', mount: 500},
  { namesId: 3, phoNumbId: 3, country: 'PORTUGAL', mount: 2020}
]

const phoneNumbers= [
  { id: 1, phoNumb: '111', name: 'JHON EVANS'},
  { id: 2, phoNumb: '222', name: 'JUDITH SOTO'},
  { id: 3, phoNumb: '333', name: 'OSCAR CIENFUEGOS'},
  { id: 4, phoNumb: '444', name: 'ANDREW JONES'}
]

目标结果

const mergedNumbers = [
  {'JULIO FONTOVA': ['111', '222']},
  {'CHRISTIAN JONES': ['222', '333']},
  {'MARK DAVIES': ['111', '222', '333']}
]

实现代码

// 建立nameId与name的映射表
const nameMap = new Map(names.map(item => [item.id, item.name]));
// 建立phoneId与phoNumb的映射表
const phoneMap = new Map(phoneNumbers.map(item => [item.id, item.phoNumb]));

// 按姓名分组收集电话号码
const groupedData = {};
nexus.forEach(entry => {
  const userName = nameMap.get(entry.namesId);
  const userPhone = phoneMap.get(entry.phoNumbId);
  
  if (!groupedData[userName]) {
    groupedData[userName] = [];
  }
  // 避免重复添加同一号码
  if (!groupedData[userName].includes(userPhone)) {
    groupedData[userName].push(userPhone);
  }
});

// 转换为目标数组格式
const mergedNumbers = Object.entries(groupedData).map(([name, phones]) => ({ [name]: phones }));

console.log(mergedNumbers);

代码说明

  • 用Map构建id与对应值的映射,减少数组遍历次数,提升处理效率
  • 遍历关联表nexus,通过映射表快速匹配姓名和电话号码,完成分组收集
  • 最后将分组后的对象转换为目标数组结构,每个元素为单独的键值对对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:15:42