如何使用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
相关产品推荐
相关产品推荐

