【问题标题】:How to replace the javascript object property name dynamically如何动态替换javascript对象属性名
【发布时间】:2014-10-20 08:38:19
【问题描述】:

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

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

【问题讨论】:

  • 对象没有顺序。
  • 为什么订单有问题?
  • 我冒昧地修复了我认为您的问题中的错字(您使用了pre_name 而不是old_name,我很确定您的意思是old_name)。此外,它是“I”(大写),而不是“i”(小写),在英语中,always
  • 我不认为这是对那个问题的欺骗,@Cerbrus,因为顺序是这个问题的重要组成部分。

标签: javascript json object


【解决方案1】:

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

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

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

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

【讨论】:

  • 这不是唯一的方法。您可以使用:JSON.parse(JSON.stringify(myObj).replace(old, new))。 (说真的,不要使用这个)
  • @Cerbrus: :-) 也许是唯一不能完全替换对象的方法。
  • @Cerbrus 不,你不能。原始文本替换与上面的代码不等价,因为它将用new 替换每个出现的old .不仅在一个属性名称中。不仅在键中。
  • @TheParamagneticCroissant:var old = '"myKey":', new = '"otherKey":'。或使用正则表达式替换。当然,只是把钥匙自己倒在那里是自找麻烦。嗯,首先比使用这个问题更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2021-09-26
  • 1970-01-01
  • 2020-04-19
  • 2010-12-20
相关资源
最近更新 更多