【发布时间】:2014-11-13 18:45:48
【问题描述】:
我有以下输入:
{
foo: 4,
bar: 3
}
我想修改这个对象的键来获取:
{
x_foo_y: 4,
x_bar_y: 3
}
是否可以在不创建新对象的情况下修改对象? (jQuery 可用)
【问题讨论】:
标签: javascript jquery object
我有以下输入:
{
foo: 4,
bar: 3
}
我想修改这个对象的键来获取:
{
x_foo_y: 4,
x_bar_y: 3
}
是否可以在不创建新对象的情况下修改对象? (jQuery 可用)
【问题讨论】:
标签: javascript jquery object
是的,您只需添加新密钥并删除旧密钥:
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 的正常编译类模式慢得多)。
如果您想对对象中的所有“自有”属性执行此操作:
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
}
}
【讨论】:
您需要添加密钥,然后删除旧密钥。
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))
【讨论】: