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

How to replace the javascript object property name dynamically

我创建了一个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"}}

如果我用objone替换obj1 ,像这样:

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

对象顺序改为:

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

但我需要单独更改属性名称而不是命令,我也尝试更换字符串,但我认为这不是正确的方式,所以请给我一些建议。

问题作者:troy
采纳答案:

对象没有顺序。 你看到的任何明显的顺序都是不明确的行为,你不能依赖它。 他们没有问这个问题,但现在他们做了

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

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

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

答案作者:t-j-crowder

参考更多解答:How to replace the javascript object property name dynamically,转载请保留如何动态替换JavaScript对象属性名称

更多:object