修改对象的键而不创建新对象

hsz*_*hsz 3 javascript jquery object

我有以下输入:

{
  foo: 4,
  bar: 3
}
Run Code Online (Sandbox Code Playgroud)

我想修改这个对象的键来得到:

{
  x_foo_y: 4,
  x_bar_y: 3
}
Run Code Online (Sandbox Code Playgroud)

是否可以在不创建新对象的情况下修改对象?(jQuery 可用)

T.J*_*der 5

是的,您只需添加新密钥并删除旧密钥:

obj.x_foo_y = obj.foo;
delete obj.foo;
obj.x_bar_y = obj.bar;
delete obj.bar;
Run Code Online (Sandbox Code Playgroud)

请注意,在某些引擎(特别是 Chrome 中的 V8)上,这会影响对象的性能。如果您不需要实际删除属性,您可以将它们的值设置为undefined

obj.x_foo_y = obj.foo;
obj.foo = undefined;
obj.x_bar_y = obj.bar;
obj.bar = undefined;
Run Code Online (Sandbox Code Playgroud)

这不会产生影响(正是它delete使 V8 将对象置于“字典模式”,这比 V8 的正常编译类模式慢得多)。

如果您想对对象中的所有“拥有”属性执行此操作:

var key;
for (key in obj) {
    if (obj.hasOwnProperty(key)) {
        obj["x" + key + "y"] = obj[key];
        delete obj[key]; // Or obj[key] = undefined if that's okay for your use case
    }
}
Run Code Online (Sandbox Code Playgroud)