Aquí está mi diccionario:
const dict = { "key_1" : "z", "key_2" : "a", "key_3" : "b", "key_4" : "y" };Quiero ordenarlo alfabéticamente por valor para que se vea así:
const sorted_dict = { "key_2" : "a", "key_3" : "b", "key_4" : "y", "key_1" : "z" };Esto es lo que creo que debería funcionar:
var items = Object.keys(dict).map(function(key) { return [key, dict[key]]; }); items.sort((a, b) => a[1] - b[1]); console.log(items)Pero no está ordenando en absoluto:
[ [ "key_1", "z" ], [ "key_2", "a" ], [ "key_3", "b" ], [ "key_4", "y" ] ]¿Por qué no funciona la clasificación?
Espero que este código te ayude
const dict = { key_1: "z", key_2: "a", key_3: "b", key_4: "y", }; const sortable = Object.fromEntries( Object.entries(dict).sort(([, a], [, b]) => a.localeCompare(b)) ); console.log(sortable);No existe tal cosa como un diccionario ordenado en JavaScript. No hay garantía de que se conserve el orden de inserción ni el orden alfabético, incluso si a veces tienes la ilusión de que es así, nunca debes confiar en él. Si necesita orden, debe usar una matriz, un conjunto o un mapa
El siguiente código ordenará el diccionario por el código de caracteres, es decir, el orden del alfabeto:
const dict = { "key_1" : "z", "key_2" : "a", "key_3" : "b", "key_4" : "y" }; const sorted = Object.entries(dict) .sort(([, v1], [, v2]) => v1.toUpperCase().charCodeAt(0) - v2.toUpperCase().charCodeAt(0)) .reduce((obj, [k, v]) => ({ ...obj, [k]: v }), {}) console.log(sorted) //{key_2: 'a', key_3: 'b', key_4: 'y', key_1: 'z'}Sin embargo, esto solo funcionará cuando el valor sea un carácter. ¿Qué para una función que también ordena valores más grandes?