我的任務有序映射實現
在我的JavaScript代碼,我經常使用對象的「地圖」鍵的值,所以我可以在以後通過一定的值直接訪問它們。例如:
var helloMap = {};
helloMap.de = "Hallo";
helloMap["en"] = "Hello";
helloMap.es = "Hola";
所以我建立通過一步在我的源代碼使用兩個可用符號對象樣式和陣列樣式地圖對象的步驟。
後來我可以訪問我通過helloMap["de"]
添加的值。因此,如果我不必關心在對象上設置屬性的順序,那就好了。
如果我想現在迭代對象的屬性,據我所知,沒有辦法確保我將按照它們添加的順序迭代它們。
注:我不能使用一些包裝對象,只是在那裏舉行一個數組,然後使用它的方法來添加值,所以是這樣的:
var HelloMap = function(){
this.myMap = [];
this.addProperty = function(key, value){
this.myMap.push({key: key, value: value});
}
}
或類似的東西不會爲我工作。所以對於使用該對象的程序員來說,解決方案必須是絕對透明的。
這就是說我需要的對象將是一個空對象,它維護添加到它的屬性的順序。像這樣的東西會做:
var helloMap = {};
helloMap = getOrderAwareObject(helloMap);
,這樣的形式helloMap.xy = "foo"
和helloMap["yz"] = "bar"
將在對象跟蹤「以」每進一步分配,
可能的解決方案
因爲我做在下劃線或jQuery中找不到任何解決方案給我這樣一個特殊的對象,我碰到了爲JavaScript對象中的屬性定義getter和setter的可能性,因爲我可以依靠ECMAScript 5標準我可以使用它。
這個問題是,你必須知道在對象被設置之前可以設置的所有可能的屬性。因爲如果你定義它你得到名稱它。
我所尋找的東西就像一個默認吸氣和默認二傳手其適用的對象,如果沒有getter和setter已爲屬性定義。所以我可以隱藏排序的地圖後面的對象界面。
- 在你知道的任何框架中,是否已經有解決方案?
- 有沒有類似「default getter/setter」的機制?
如果順序很重要,那麼你必須使用一個數組。 –
是的..好..謝謝。但關聯數組的問題在於,它們不能通過我需要的點運算符來訪問。順便說一下......你確定他們甚至保持了他們的訂單嗎? – Chris
Javascript不會執行關聯數組。您可以設置數組屬性,但它們獨立於索引數組項,並且與無格式js對象的屬性相同。 –