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

如何动态替换javascript对象属性名,javascript,json,object,Javascript,Json,Object,我创建了一个JavaScript对象,如 var obj={} var prop = {} prop.name= "name", prop.value = "10" obj[old_name] = prop; 我需要将旧名称更改为新名称。我试过了 obj[new_name] = obj[old_name]; delete obj[old_name]; 它是有效的,但是,对象顺序改变了 例如: {"obj1":{"name:name","value:10"},"obj2":{"name:nam

我创建了一个JavaScript对象,如

var obj={}
var prop = {}
prop.name= "name",
prop.value = "10"
obj[old_name] = prop;
我需要将
旧名称
更改为
新名称
。我试过了

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"}}]

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

对象没有顺序。你看到的任何明显的顺序都是未指明的行为,你不能依赖它。当被问到这个问题时,他们没有回答,但是:

  • 让键成为一个新的空列表
  • 对于作为整数索引的O的每个自己的属性键P,按升序数字索引顺序
    • 添加P作为键的最后一个元素
  • 对于O的每个自己的属性键P,它是一个字符串,但不是一个整数索引,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 对于作为符号的O的每个自己的属性键P,按属性创建顺序
    • 添加P作为键的最后一个元素
  • 归还钥匙
  • 重命名属性的方法是唯一的方法:创建新属性,然后删除旧属性。这样做将更改它在对象顺序中的显示位置,因为它是在上一个属性之后创建的


    如果需要订购,请使用数组。虽然理论上数组也没有顺序(因为),但我们有一个惯例,即它们有顺序,基于条目索引的数值:索引
    0
    处的条目在索引
    1
    处的条目之前,依此类推。(而且现代JavaScript引擎可以而且确实尽可能使用真实数组。)

    对象没有顺序。为什么顺序是个问题?我已经冒昧地修复了我认为是你问题中的一个输入错误(你使用了
    pre_name
    而不是
    old_name
    ,我很确定你的意思是
    old_name
    )。另外,在英语中,它总是“I”(大写),而不是“I”(小写)。我不认为这是对这个问题的愚弄,@Cerbrus,因为顺序是这个问题的重要组成部分。这不是唯一的方法。您可以使用:
    JSON.parse(JSON.stringify(myObj).replace(新旧))
    。(说真的,不要用这个)@Cerbrus::-)也许这是唯一不能完全替换对象的方法。@Cerbrus不,你不能。原始文本替换并不等同于上述代码,因为它会将每次出现的
    old
    替换为
    new
    。不仅在一个属性名称中。不仅在键中。@TheParamagneticCroissant:
    var old='“myKey:”,new='“otherKey:”
    。或者使用正则表达式替换。当然,只要把钥匙自己倒进去就有问题了。首先,比使用这个问题更多。