Así que tengo una lista de países, por defecto vienen ordenados por código ISOA2, que es una especie de código de país.
Di esta lista:
{ "AD": "Andorra", "AE": "United Arab Emirates", "AF": "Afghanistan", "AG": "Antigua and Barbuda", "AI": "Anguilla", "AL": "Albania", "AM": "Armenia", "AN": "Netherlands Antilles", "GB": "United Kingdom" }Y tengo este código:
function sortObject(obj) { return Object .keys(obj) .sort() .reduce((a, v) => { a[v] = obj[v]; return a; }, {}); } // data is the list of countries const result = sortObject(data);Estoy tratando de ordenarlo con ese código, pero siempre devuelve la misma lista.
Necesito que la lista sea así:
{ "AF": "Afghanistan", "AL": "Albania", "AD": "Andorra", "AI": "Anguilla", "AG": "Antigua and Barbuda", "AM": "Armenia", "AN": "Netherlands Antilles", "AE": "United Arab Emirates", "GB": "United Kingdom" }¿Qué estoy haciendo mal?
Puedes jugar aquí:
https://codesandbox.io/s/js-playground-bifurcado-xk005?file=/src/index.js
Verás el resultado en la consola.
Tome Object.entries por valor, luego use Object.fromEntries para convertir esta matriz de pares clave-valor nuevamente en un objeto:
Object.fromEntries( Object.entries(obj) .sort(([keyA, valueA], [keyB, valueB]) => valueA.localeCompare(valueB)) )Tenga en cuenta que ordenar objetos no tiene sentido si hay claves numéricas o si el objeto está mutado (ya que eso cambia el orden de clasificación nuevamente).
¿Te funciona esto?
function sortObject(obj) { return Object.fromEntries(Object .entries(obj) .sort((a,b)=>a[1].localeCompare(b[1]))); } const data = { "AD": "Andorra", "AE": "United Arab Emirates", "AF": "Afghanistan", "AG": "Antigua and Barbuda", "AI": "Anguilla", "AL": "Albania", "AM": "Armenia", "AN": "Netherlands Antilles", "GB": "United Kingdom" } // data is the list of countries const result = sortObject(data); console.log(result);Prueba esto para ordenar:
const sortObject = obj => { const ret = {} Object.values(obj) .sort() .forEach(val => { const key = Object.keys(obj).find(key => obj[key] === val) ret[key] = val }) return ret }