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

JavaScript中如何简化Array.map搭配Array.find的实现?可使用Lodash

原生JS实现(更高效+更简洁)

你原有写法的问题是每次遍历usersData时都会全量遍历users查找匹配项,数据量较大时性能会明显下降。可以先把基础信息数组转成ID映射表,后续直接查表取值,同时也能简化写法:

// 先构造ID为key的映射表,只需遍历一次users
const userMap = new Map(users.map(u => [u.id, u]));
// 合并数据,可选加默认值避免匹配不到时抛出异常
const result = usersData.map(data => ({
  ...data,
  name: userMap.get(data.userId)?.name ?? '未知用户'
}));

如果不需要容错处理,也可以直接简化原有写法为单行形式:

const result = usersData.map(data => ({...data, name: users.find(u => u.id === data.userId).name}));
// 仍优先推荐映射表写法,大数据量下性能优势非常明显

借助Lodash实现

用Lodash可以进一步简化映射表构造逻辑,自带的容错能力也能减少冗余代码:

// 用_.keyBy一键生成ID到用户对象的映射
const userMap = _.keyBy(users, 'id');
// 合并数据
const result = _.map(usersData, item => _.assign({}, item, {
  name: _.get(userMap, `${item.userId}.name`, '未知用户')
}));

如果需要全量合并两个匹配对象的所有属性,还可以写得更短:

const userMap = _.keyBy(users, 'id');
const result = _.map(usersData, item => _.merge({}, item, userMap.get(item.userId)));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03