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

如何基于匹配对象属性合并两个数组?(Lodash/原生JS)

当然可以搞定这个需求!不管是用原生JavaScript还是Lodash,都有简洁高效的实现方式,我给你两种方案参考:

原生JavaScript实现

如果不想引入第三方库,原生JS就能完美解决。为了提升性能(尤其是数据量大的时候),我们可以先把users数组转换成一个以user_id为键的映射对象,这样查找用户信息的时间复杂度是O(1),避免嵌套循环带来的性能损耗:

const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }];
const departments = [{ id: 900, manager: 100 }, { id: 901, manager: 101 }];

// 构建用户ID到用户名的映射
const userMap = users.reduce((acc, user) => {
  acc[user.user_id] = user.name;
  return acc;
}, {});

// 遍历部门数组,添加对应的用户名
const updatedDepartments = departments.map(dept => ({
  // 展开原部门对象的所有属性
  ...dept,
  // 根据manager字段从映射中获取用户名
  name: userMap[dept.manager]
}));

console.log(updatedDepartments);
// 输出:[{ id: 900, manager: 100, name: 'Bob' }, { id: 901, manager: 101, name: 'Joe' }]
Lodash实现

如果你已经在项目中使用了Lodash,可以利用它提供的工具函数让代码更简洁。这里推荐用_.keyBy先构建用户映射,再用_.map遍历部门数组:

const _ = require('lodash'); // 确保已引入Lodash

const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }];
const departments = [{ id: 900, manager: 100 }, { id: 901, manager: 101 }];

// 按user_id分组构建用户对象
const userMap = _.keyBy(users, 'user_id');

// 生成更新后的部门数组
const updatedDepartments = _.map(departments, dept => ({
  ...dept,
  // 用_.get避免找不到用户时出现undefined(可选,根据需求调整)
  name: _.get(userMap, `${dept.manager}.name`)
}));

console.log(updatedDepartments);
// 输出和原生方案一致

两种方案都能得到你想要的结果,原生方案更轻量,Lodash方案则在处理复杂数据时更灵活~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:40