我有以下输入:修改对象的关键点,而无需创建新的对象
{
foo: 4,
bar: 3
}
我想修改该对象的键来获得:
{
x_foo_y: 4,
x_bar_y: 3
}
是否有可能修改的对象,而无需创建新的一个 ? (jQuery可用)
我有以下输入:修改对象的关键点,而无需创建新的对象
{
foo: 4,
bar: 3
}
我想修改该对象的键来获得:
{
x_foo_y: 4,
x_bar_y: 3
}
是否有可能修改的对象,而无需创建新的一个 ? (jQuery可用)
是的,你只需要添加新键和删除旧的:
obj.x_foo_y = obj.foo;
delete obj.foo;
obj.x_bar_y = obj.bar;
delete obj.bar;
注意,在一些发动机(尤其是V8在Chrome),这将在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))
哦!代码片段!我没有意识到他们已经走了。 :-) – 2014-09-19 08:28:07
文字添加属性不会触发“字典模式”? – user2864740 2014-09-19 08:25:32
是否有可能在循环中做到这一点?因为所有的密钥都会获得相同的前缀/后缀。 – hsz 2014-09-19 08:25:33
这是一个伟大的见解。 – 2014-09-19 08:25:48