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

如何使用Lodash实现以对象A的值为新键、对象B对应原键的值为新值的对象转换

使用Lodash实现对象键值映射转换

嘿,这个需求用Lodash完全可以轻松搞定,我给你分享两种实用的实现方式:

方法一:使用_.mapKeys快速转换

_.mapKeys是Lodash专门用来修改对象键的工具函数,刚好适配你的场景——我们可以基于对象B的值,把对象A对应键的值作为新对象的键:

const _ = require('lodash');
const A = { a: 'foo', b: 'bar', c: 'baz' };
const B = { a: 'aaa', b: 'bbb', c: 'ccc' };

const transformedObj = _.mapKeys(B, (value, key) => A[key]);
console.log(transformedObj); // 输出 { foo: 'aaa', bar: 'bbb', baz: 'ccc' }

原理说明:

  • _.mapKeys的第一个参数是要提取值的目标对象(这里是B,因为我们需要它的值)
  • 第二个参数是迭代函数,接收两个参数:当前遍历到的B的value,以及对应的key
  • 我们返回A[key],也就是把A中对应键的值作为新对象的键,B的value直接作为新对象的值,一步到位生成目标对象

方法二:使用_.transform灵活构建对象

如果你的场景后续可能需要更复杂的逻辑(比如过滤掉不匹配的键),_.transform会更灵活,它允许你手动构建新对象:

const _ = require('lodash');
const A = { a: 'foo', b: 'bar', c: 'baz' };
const B = { a: 'aaa', b: 'bbb', c: 'ccc' };

const transformedObj = _.transform(A, (accumulator, newKey, originalKey) => {
  // 可选:如果需要确保B中存在对应键,可以加判断
  if (B.hasOwnProperty(originalKey)) {
    accumulator[newKey] = B[originalKey];
  }
}, {});
console.log(transformedObj); // 输出 { foo: 'aaa', bar: 'bbb', baz: 'ccc' }

原理说明:

  • _.transform遍历对象A的每一个键值对
  • 第一个参数是遍历的源对象(A),第二个参数是处理函数,第三个参数是初始的空对象(用来存放结果)
  • 处理函数中的accumulator是我们正在构建的新对象,newKey是A的值(目标键),originalKey是A的原键,我们把B中originalKey对应的值赋值给accumulator[newKey]即可

注意事项:

如果对象A中存在重复的值,生成的新对象里后面的键会覆盖前面的,因为对象的键是唯一的。比如如果A的a和b值都是foo,那么结果里foo对应的会是B中b的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:37:29