Não há uma maneira concisa de manipular diretamente as "chaves" de um objeto Javascript. Não é realmente projetado para isso. Você tem a liberdade de colocar seus dados em algo melhor do que um objeto normal (ou um Array, como seu código de exemplo sugere)?
Em caso afirmativo, e se sua pergunta pudesse ser reformulada como "Que objeto semelhante a um dicionário devo usar se quiser iterar sobre as chaves em ordem classificada?" então você pode desenvolver um objeto como este:
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]); }
Se você não tiver controle sobre o fato de que os dados estão em um objeto regular, este utilitário converterá o objeto regular em seu dicionário totalmente funcional:
a.importObject = function(object) {
for (var i in object) { this.set(i, object); }
};
Esta foi uma definição de objeto (em vez de uma função construtora reutilizável) para simplificar; edite à vontade.