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

Lodash pickAs方法:如何将对象属性映射到新对象的不同键名?

当然可以实现这种「选取指定属性同时重命名键」的需求!不管是用原生JavaScript自己封装函数,还是借助Lodash这类工具库,都能轻松搞定。下面结合你的示例来具体说明:

一、原生JavaScript实现

自己写一个pickAs函数其实非常直观,核心思路就是遍历你的属性映射规则,从原对象中取出对应值,再赋值给新的键名即可:

function pickAs(obj, keyMap) {
  const result = {};
  // 遍历映射规则里的每一组原键→新键关系
  for (const originalKey in keyMap) {
    // 只处理原对象自身拥有的属性(可选,按需去掉)
    if (obj.hasOwnProperty(originalKey)) {
      const newKey = keyMap[originalKey];
      result[newKey] = obj[originalKey];
    }
  }
  return result;
}

// 测试你的示例
const a = {prop1: 'a', prop2: 'b', prop3: 'c'};
const mappedObj = pickAs(a, {prop1: 'first', prop3: 'second'});
console.log(mappedObj); // 输出: {first: 'a', second: 'c'}

如果不需要过滤继承属性的逻辑,直接去掉hasOwnProperty的判断就行,代码会更简洁。

二、用Lodash实现

虽然Lodash没有直接提供名为pickAs的方法,但我们可以用它的现有工具函数组合出相同效果,比如用_.reduce来处理:

const _ = require('lodash');

// 把pickAs挂载到Lodash上(也可以单独作为函数)
_.pickAs = function(obj, keyMap) {
  return _.reduce(keyMap, (result, newKey, originalKey) => {
    if (_.has(obj, originalKey)) {
      result[newKey] = obj[originalKey];
    }
    return result;
  }, {});
};

// 测试示例
const a = {prop1: 'a', prop2: 'b', prop3: 'c'};
const mappedObj = _.pickAs(a, {prop1: 'first', prop3: 'second'});
console.log(mappedObj); // 输出: {first: 'a', second: 'c'}

你也可以用「先选属性再重命名」的组合写法,先通过_.pick筛选出需要的属性,再用_.mapKeys替换键名:

const _ = require('lodash');

const a = {prop1: 'a', prop2: 'b', prop3: 'c'};
const keyMap = {prop1: 'first', prop3: 'second'};

const mappedObj = _.mapKeys(
  _.pick(a, Object.keys(keyMap)), 
  (value, originalKey) => keyMap[originalKey]
);
console.log(mappedObj); // 输出: {first: 'a', second: 'c'}

两种写法都能达到预期效果,看你个人习惯选择就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:58:18