我有以下輸入:修改對象的關鍵點,而無需創建新的對象
{
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