2014-09-19 67 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

相關問題