Re: ¿Cómo ordenar un objeto JS?
Respuesta: No se puede. Entonces, en cambio, necesitas una estructura de datos más sofisticada. Tiene muchas opciones:
- Puede usar una matriz separada para mantener el orden de las teclas del objeto. (Esto es lo que demuestra la respuesta de @Felix Kling.) Bueno: recuperación rápida por orden o nombre. Malo: necesita una segunda estructura de datos que debe mantenerse sincronizada con la primera.
- En lugar de que el Objeto simplemente tenga propiedades y valores, las propiedades podrían contener Objetos que contienen los valores y un orden de clasificación. Bueno: 1 estructura de datos. Búsqueda rápida por nombre de propiedad. Malo: búsqueda lenta por orden (necesita escanear la estructura). Clasificación lenta.
- Utilice una matriz, con elementos que constan de objetos que contienen la clave y el valor. Bueno: 1 estructura de datos. Búsqueda rápida por orden. Clasificación rápida. Malo: búsqueda lenta por nombre de propiedad (necesidad de escanear la estructura).
Recomiendo la solución 3 ya que utiliza la mecánica JS para gestionar el pedido.
Ejemplos:
// Object holds sort order: (Solution 2)
var foo = {
Suzy: {v: 4, order: 0},
Billy: {v: 5, order: 1},
Jimmy: {v: 2, order: 2},
Sally: {v: 1, order: 3}
};
// Array holds keys: (Solution 3)
var woof = [
{k: 'Suzy', v: 4},
{k: 'Billy', v: 5},
{k: 'Jimmy', v: 2},
{k: 'Sally', v: 1}
];
// Sort the woof array by the key names:
woof.sort(function(a, b) {
return a.k.localeCompare(b.k);
});
// The third key and value:
woof[2].k; // the third key
woof[2].v; // the third value
Editado: código actualizado para corregir error tipográfico. Gracias, @Martin Fido
No puede ordenar un Objeto JS como se muestra en su pregunta. Imposible. ¿Por qué? Porque las propiedades del objeto JS no están ordenadas. Cambiar a una matriz. Las matrices están ordenadas, los objetos no. –