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

时间:2014-09-19 08:20:17

标签: javascript jquery object

我有以下输入:

{
  foo: 4,
  bar: 3
}

我想修改此对象的键以获取:

{
  x_foo_y: 4,
  x_bar_y: 3
}

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

2 个答案:

答案 0 :(得分:4)

您需要添加密钥,然后删除旧密钥。

var obj = {
  foo: 4,
  bar: 3
};
obj.x_foo_y = obj.foo;
obj.x_bar_y = obj.bar;
delete obj.foo;
delete obj.bar;
alert(JSON.stringify(obj))

答案 1 :(得分:4)

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

obj.x_foo_y = obj.foo;
delete obj.foo;
obj.x_bar_y = obj.bar;
delete obj.bar;

请注意,在某些引擎(特别是Chrome中的V8)上,这将是对象的impact the performance。如果您不需要实际删除属性,则可以将其值设置为undefined

obj.x_foo_y = obj.foo;
obj.foo = undefined;
obj.x_bar_y = obj.bar;
obj.bar = undefined;

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

如果你想为所有"拥有"对象中的属性:

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