我的任务有序映射实现
在我的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对象的属性相同。 –