2014-09-19 115 views

回答

4

是的,你只需要添加新键和删除旧的:

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

文字添加属性不会触发“字典模式”? – user2864740 2014-09-19 08:25:32

+0

是否有可能在循环中做到这一点?因为所有的密钥都会获得相同的前缀/后缀。 – hsz 2014-09-19 08:25:33

+0

这是一个伟大的见解。 – 2014-09-19 08:25:48

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

+0

哦!代码片段!我没有意识到他们已经走了。 :-) – 2014-09-19 08:28:07

相关问题