我创建了一个像
这样的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"}}]
但我需要单独更改属性名称而不是顺序,我也尝试使用字符串替换,但我认为这不是正确的方法,所以请给我一些想法。
答案 0 :(得分:5)
对象没有订单。你看到的任何明显的顺序都是未指明的行为,你不能依赖它。他们在提出问题时没有,但是they do now:
- 让键成为新的空列表。
- 对于作为整数索引的 O 的每个自有属性键 P ,按升序数字索引顺序
- 添加 P 作为键的最后一个元素。
- 对于 O 的每个属性键 P ,它是一个String但不是整数索引,在属性创建顺序中
- 添加 P 作为键的最后一个元素。
- 对于作为符号的 O 的每个属性键 P ,在属性创建顺序中
- 添加 P 作为键的最后一个元素。
- 返回键。
醇>
重命名属性的方法是执行此操作的唯一方法:创建新属性,然后删除旧属性。这样做会改变它在对象顺序中出现的位置,因为它是在前一个属性之后创建的。
如果您需要订购,请使用数组。 虽然理论上数组也没有顺序(因为they're not really arrays),我们有它们有顺序的约定,基于条目索引的数值:索引处的条目0
位于索引1
的条目之前,依此类推。 (现代JavaScript引擎可以并且尽可能使用真实数组。)