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

如何重命名对象的head键为newHead且不丢失子属性值?

修改对象键名同时保留子属性的几种方法

嘿,这个需求挺常见的,我给你分享几个实用的方案,你可以根据自己的场景来选:

1. 创建新对象(不修改原对象,推荐纯函数场景)

如果你不想改动原来的对象,想要返回一个全新的对象,ES6的解构赋值是最优雅的方式:

const originalObj = { 
  "head" : { 
    "nestedObject" : { key: "value1" }, 
    "someMoreObjects": { key: "value2" } 
  } 
};

// 解构出原head并重命名为newHead,同时保留其他可能存在的键
const { head: newHead, ...restOfObj } = originalObj;
const updatedObj = { newHead, ...restOfObj };

这样操作后,originalObj完全不受影响,updatedObj里就有了newHead键,而且它的子属性和原head的子属性是同一个引用(所以子属性的值不会丢失,也不需要额外拷贝)。

2. 直接修改原对象(适合不需要保留原对象的场景)

如果允许直接修改原对象,步骤很简单:先给对象添加新键并赋值为原head的值,然后删除旧的head键即可:

const originalObj = { 
  "head" : { 
    "nestedObject" : { key: "value1" }, 
    "someMoreObjects": { key: "value2" } 
  } 
};

// 把原head的值赋值给新键newHead
originalObj.newHead = originalObj.head;
// 删除旧的head键
delete originalObj.head;

这种方法会直接改变原对象,但子属性的引用关系保持不变,所有子属性的值都不会丢失。

额外提示:关于深拷贝的注意点

上面两种方法里,newHead的子对象都是引用传递,也就是说如果你后续修改newHead.nestedObject里的内容,原head(如果还存在的话)对应的子对象也会跟着变化。如果需要完全独立的副本,可以用深拷贝的方式,比如:

// 用JSON方法实现深拷贝(注意:不能处理函数、Symbol等特殊类型)
originalObj.newHead = JSON.parse(JSON.stringify(originalObj.head));
delete originalObj.head;

如果你的对象里有特殊类型,建议用专门的工具库(比如Lodash的cloneDeep)来处理深拷贝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:02:51