【问题标题】:change property name更改属性名称
【发布时间】:2012-01-18 23:37:55
【问题描述】:

我有一个 JavaScript 对象如下:

var a = { 
 Prop1: 'test', 
 Prop2: 'test2' 
}

如何将Prop1 的属性名称更改为Prop3?

我尝试了以下代码,但没有成功...

for (var p in r){
  p.propertyName = 'Prop3';
}

【问题讨论】:

  • 我想这一次我会说出来。 var a = { Prop1: 'test', Prop2: 'test2' } 不是 JSON 数据。它是一个 JavaScript 对象文字,如果您愿意,可以将其转换为 JSON 数据。
  • - 您可以使用实用程序来处理此问题。 stackoverflow.com/a/60677446/6512565

标签: javascript


【解决方案1】:

这是不可能的。

你可以写

a.Prop3 = a.Prop1;
delete a.Prop1;

【讨论】:

  • delete 函数的性能通常不受欢迎。重新创建一个对象不是更好吗?
  • @Dmitry:如果你意识到你的应用程序很慢,因为你正在使用删除,才问自己这个问题。另外我猜如果有很多属性,创建一个新对象可能会更长。
  • @user276648:加上 GC 流失。
  • @Dmitry 使用“删除”有什么缺点?
【解决方案2】:

另一种方法是使用建议的property rest notation,如下所示:

const {Prop1, ...otherProps} = a;
    
const newObj = {Prop3: Prop1, ...otherProps};

这得到了 Babel 的 object rest spread transform 的支持。

【讨论】:

    【解决方案3】:

    添加到对象剩余散布解决方案

    const { Prop1: Prop3, ...otherProps } = a;
    const newObj = { Prop3, ...otherProps };
    

    【讨论】:

      【解决方案4】:

      使用解构赋值

      解构赋值语法是一个 JavaScript 表达式 可以从数组中解压缩值,或从 对象,转换为不同的变量。

      const myObj = {
        prop1: 'asd',
        prop2: 'asd',
        prop3: 'asd'
      }
      
      const {prop1, ...rest} = myObj;
      
      console.log({...rest})

      欲了解更多信息click here

      【讨论】:

        猜你喜欢
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多