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

时间:2014-10-20 08:38:20

标签: javascript json object

我创建了一个像

这样的JavaScript对象
var obj={}
var prop = {}
prop.name= "name",
prop.value = "10"
obj[old_name] = prop;

我需要将old_name更改为new_name。我试过了

obj[new_name] = obj[old_name];
delete obj[old_name];

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

例如:

{"obj1":{"name:name","value:10"},"obj2":{"name:name","value:10"}}

如果我将obj1替换为objone,请执行以下操作:

obj[objone ] = obj[obj1];
delete obj[obj1 ];

对象顺序更改为:

{"obj2":{"name:name","value:10"},"objone":{"name:name","value:10"}}]

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

1 个答案:

答案 0 :(得分:5)

对象没有订单。你看到的任何明显的顺序都是未指明的行为,你不能依赖它。他们在提出问题时没有,但是they do now

  
      
  1. 成为新的空列表。
  2.   
  3. 对于作为整数索引的 O 的每个自有属性键 P ,按升序数字索引顺序      
        
    • 添加 P 作为的最后一个元素。
    •   
  4.   
  5. 对于 O 的每个属性键 P ,它是一个String但不是整数索引,在属性创建顺序中      
        
    • 添加 P 作为的最后一个元素。
    •   
  6.   
  7. 对于作为符号的 O 的每个属性键 P ,在属性创建顺序中      
        
    • 添加 P 作为的最后一个元素。
    •   
  8.   
  9. 返回
  10.   

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

如果您需要订购,请使用数组。 虽然理论上数组也没有顺序(因为they're not really arrays),我们有它们有顺序的约定,基于条目索引的数值:索引处的条目0位于索引1的条目之前,依此类推。 (现代JavaScript引擎可以并且尽可能使用真实数组。)