Hay no es una forma concisa para manipular directamente las "claves" de un objeto Javascript. En realidad, no está diseñado para eso. ¿Tiene la libertad de poner sus datos en algo mejor que un objeto común (o una matriz, como sugiere el código de muestra)?
Si es así, y si su pregunta pudiera reformularse como "¿Qué objeto similar a un diccionario debería usar si quiero iterar sobre las claves en orden ordenado?" entonces es posible que el desarrollo de un objeto como éste:
var a = {
keys : new Array(),
hash : new Object(),
set : function(key, value) {
if (typeof(this.hash[key]) == "undefined") { this.keys.push(key); }
this.hash[key] = value;
},
get : function(key) {
return this.hash[key];
},
getSortedKeys : function() {
this.keys.sort();
return this.keys;
}
};
// sample use
a.set('b',1);
a.set('z',1);
a.set('a',1);
var sortedKeys = a.getSortedKeys();
for (var i in sortedKeys) { print(sortedKeys[i]); }
Si no tiene ningún control sobre el hecho de que los datos están en un objeto de regular, esta utilidad sería convertir el objeto de regular a su diccionario completamente funcional:
a.importObject = function(object) {
for (var i in object) { this.set(i, object); }
};
Esta fue una definición de objeto (en lugar de una función de constructor reutilizable) para simplificar; editar a voluntad.
¿por qué está usando la nueva construcción Array() y luego la está usando como un objeto? –
@Luke ... Al principio también hice esto, viniendo de un fondo de PHP. Ahora lo he aprendido :) – alex
@Luke: porque no tengo experiencia, parece. ¿Puedes publicar la forma correcta en una respuesta? – mike