2013-08-21 160 views
0

我有一個多維對象是這樣的:重命名JavaScript對象鍵

var elements = { 
    front: { 
     "1": { 
      "backgroundImage": "url(images/elements/pig.png)", 
     }, 
     "2": { 
      "backgroundImage": "url(images/elements/star.png)", 
     }, 
     "3": { 
      "backgroundImage": "url(images/elements/fish.png)", 
     } 
    }, 
    top: {}, 
    left: {}, 
    right: {} 
}; 

,我需要切換兩個元素在這個對象,所以我做的:

var temp = elements[front][2]; 
elements[front][2] = elements[front][3]; 
elements[front][3] = temp; 

這給了我(開關魚明星 - 但只有屬性不是對象鍵):

var elements = { 
    front: { 
     "1": { 
      "backgroundImage": "url(images/elements/pig.png)", 
     }, 
     "2": { 
      "backgroundImage": "url(images/elements/fish.png)", 
     }, 
     "3": { 
      "backgroundImage": "url(images/elements/star.png)", 
     } 
    }, 
    top: {}, 
    left: {}, 
    right: {} 
}; 

我怎麼也重新命名對象鍵?

期望的結果:

var elements = { 
    front: { 
     "1": { 
      "backgroundImage": "url(images/elements/pig.png)", 
     }, 
     "3": { 
      "backgroundImage": "url(images/elements/fish.png)", 
     }, 
     "2": { 
      "backgroundImage": "url(images/elements/star.png)", 
     } 
    }, 
    top: {}, 
    left: {}, 
    right: {} 
}; 
+0

期望的結果是一樣的原始對象。屬性沒有排序。如果您希望圖像按特定順序排列,則必須使用數組。 –

+0

@FelixKling我知道他們沒有訂單,但我稍後在一個循環中使用這個對象來呈現html中的背景圖像 - 並且這些屬性會一個接一個地呈現,並且僞造的訂單對我很重要。 – easwee

+3

所以,你正在使用'for ... in'循環遍歷屬性?它們的迭代次序因瀏覽器而異。你想做什麼在技術上是不可能的。 –

回答

0

你想在你的對象鍵進行排序,但你不能這樣做,因爲對象沒有一個訂單。這是JavaScript規範說的。

有些情況下,如果您依賴排序,會發生意想不到的事情。

在Chrome中,如果你定義這個對象:

var a = { 
    a: "b", 
    1: 2 
}; 

你會得到

var a = { 
    1: 2, 
    a: "b" 
}; 

,而不是(這是同一個對象,因爲再次,對象沒有順序)。在對象上

for .. in循環是在這個意義上非常誤導,你認爲他們有訂單,但真的是你可以寫一個有效的JavaScript實現,每次你做一個for .. in

如果你想時間會隨機順序按照特定的順序迭代你的鍵,例如:按字母順序排序或自然排序,你首先必須將你的對象轉換爲一個數組(它有一個順序),然​​後遍歷它。

你能想象這樣的函數:

object_iterate(my_object, function (key, value) { 
    // do things 
}, natural_order_key_sort); 
+0

我不想對鍵進行排序 - 我所要求的只是如何重寫鍵名 - 我的代碼重寫了除名稱之外的所有對象內容 - 我如何才能定位它的名稱並將其重命名? – easwee

+0

沒有重命名。你可以通過delete obj [「屬性名稱」]來刪除一個鍵,並通過正常賦值來設置它。再次,沒有排序。 – Halcyon

+0

想到了 - 實際上解決了這個問題,現在是另一種方式了,所以現在的問題非常愚蠢,但如果有人遇到同樣的問題,我會離開它。 – easwee