如何动态替换javascript对象属性名称

Tro*_*roy 5 javascript json object

我已经创建了一个JavaScript对象

var obj={}
var prop = {}
prop.name= "name",
prop.value = "10"
obj[old_name] = prop;
Run Code Online (Sandbox Code Playgroud)

我需要更改old_namenew_name.我试过了

obj[new_name] = obj[old_name];
delete obj[old_name];
Run Code Online (Sandbox Code Playgroud)

它可以工作但是,对象顺序会发生变化.

例如:

{"obj1":{"name:name","value:10"},"obj2":{"name:name","value:10"}}
Run Code Online (Sandbox Code Playgroud)

如果我更换obj1objone,就像这样:

obj[objone ] = obj[obj1];
delete obj[obj1 ];
Run Code Online (Sandbox Code Playgroud)

对象顺序更改为:

{"obj2":{"name:name","value:10"},"objone":{"name:name","value:10"}}]
Run Code Online (Sandbox Code Playgroud)

但我需要单独更改属性名称而不是顺序,我也尝试使用字符串替换,但我认为这不是正确的方法,所以请给我一些想法.

T.J*_*der 5

对象没有订单.您看到的任何明显的顺序都是未指明的行为,您不能依赖它.问题被提出时他们没有,但他们现在这样做了:

  1. 密钥成为新的空列表.
  2. 对于每个自己的属性键P,O是一个整数索引,按升序数字索引顺序
    • 添加P作为的最后一个元素.
  3. 对于每一个自己的财产键PØ这是一个字符串,但不是整数指数,物业创建顺序
    • 添加P作为的最后一个元素.
  4. 对于作为符号的O的每个自有属性键P,在属性创建顺序中
    • 添加P作为的最后一个元素.
  5. 返回.

您重命名属性的方法是执行此操作的唯一方法:创建一个新方法,然后删除旧方法.这样做会改变它在对象顺序中出现的位置,因为它是在前一个属性之后创建的.

如果您需要订购,请使用数组.虽然理论上数组也没有顺序(因为它们不是真正的数组),但是根据条目索引的数值,我们有它们有顺序的约定:索引处的条目在索引0处的条目之前1等等.(现代JavaScript引擎可以并且尽可能使用真实数组.)