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

如何将对象1的键应用到结构相同的对象2上并保留其值?

如何将一个对象的键映射到另一个结构相同的对象?

原始对象

const obj1 = {
   value1: 'Hello',
   value2: 'Goodbye',
   value3: ['yes', 'no'],
   value4: {
      value5: 'Phone'
   }
}

const obj2 = {
   v1: 'Orange',
   v2: 'Apple',
   v3: ['Cat', 'Dog'],
   v4: {
      v5: 'Basketball'
   }
}

需求

已知两个对象的层级结构、键值对数量完全一致,仅键名不同。需要将obj1的键名替换obj2的键名,同时保留obj2的所有值,得到如下结果:

{
   value1: 'Orange',
   value2: 'Apple',
   value3: ['Cat', 'Dog'],
   value4: {
      value5: 'Basketball'
   }
}

解决方案

由于对象存在嵌套结构,需要用递归方式处理深层对象:

方法1:递归遍历转换

function remapKeys(keyTemplateObj, valueSourceObj) {
  const result = {};
  const templateKeys = Object.keys(keyTemplateObj);
  const sourceKeys = Object.keys(valueSourceObj);

  templateKeys.forEach((templateKey, index) => {
    const templateVal = keyTemplateObj[templateKey];
    const sourceVal = valueSourceObj[sourceKeys[index]];

    // 处理嵌套对象(排除数组和null)
    if (typeof sourceVal === 'object' && sourceVal !== null && !Array.isArray(sourceVal)) {
      result[templateKey] = remapKeys(templateVal, sourceVal);
    } else {
      result[templateKey] = sourceVal;
    }
  });

  return result;
}

// 调用函数
const newObj = remapKeys(obj1, obj2);
console.log(newObj);

方法2:结合Object.entries与reduce实现

function remapKeys(keyTemplateObj, valueSourceObj) {
  return Object.entries(keyTemplateObj).reduce((acc, [templateKey, templateVal], index) => {
    const [_, sourceVal] = Object.entries(valueSourceObj)[index];
    
    if (typeof sourceVal === 'object' && sourceVal !== null && !Array.isArray(sourceVal)) {
      acc[templateKey] = remapKeys(templateVal, sourceVal);
    } else {
      acc[templateKey] = sourceVal;
    }
    
    return acc;
  }, {});
}

// 调用函数
const newObj = remapKeys(obj1, obj2);
console.log(newObj);

说明

  • 两个函数核心逻辑一致:按顺序匹配obj1和obj2的键,将obj2的值赋值给obj1对应的键名
  • 遇到嵌套对象时递归处理,确保深层结构的键也能被正确替换
  • 数组会直接保留obj2的数组内容,因为数组无需修改键名

内容的提问来源于stack exchange,提问作者Cemal Okten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:01:15