Me enfrento a un problema en el que obtengo resultados de Api que no puedo modificar para mi conveniencia y tengo que lidiar con lo que obtuve. Obtengo un objeto lleno de matrices que también tienen objetos dentro de ellos similares a este:
{ sectionOne: [{game: 1, order: 3},{game: 2},{game: 3},{game: 4}], sectionTwo: [{game: 1, order: 1},{game: 2},{game: 3},{game: 4}], sectionThree: [{game: 1, order: 2},{game: 2},{game: 3},{game: 4}], }En todas las secciones, el primer elemento de la matriz siempre tiene una clave llamada orden, que es la posición en la que debe estar la matriz en el objeto. Desde el ejemplo superior, los resultados esperados deberían ser:
{ sectionThree: [{game: 1, order 1},{game: 2},{game: 3},{game: 4}], sectionOne: [{game: 1, order 2},{game: 2},{game: 3},{game: 4}], sectionTwo: [{game: 1, order 3},{game: 2},{game: 3},{game: 4}], }PD. Sé que no hay un método que pueda ordenar objetos, intenté mapearlos con entradas, con claves, pero no sé cómo profundizar en la estructura y orientarlos.
Puede hacer esto usando Array#sort y Destructuring Assignment de desestructuración:
const obj = { sectionOne: [{ game: 1, order: 3 }, { game: 2 }, { game: 3 }, { game: 4 }], sectionTwo: [{ game: 1, order: 1 }, { game: 2 }, { game: 3 }, { game: 4 }], sectionThree: [{ game: 1, order: 2 }, { game: 2 }, { game: 3 }, { game: 4 }], }; let sortedObj = Object.fromEntries( Object.entries(obj).sort( ([, [{ order: o1 }]], [, [{ order: o2 }]]) => o1 - o2 ) ); console.log(sortedObj);¿Esto funciona para tí?
arr = arr.sort((a, b) => a[0].order - b[0].order)Si entendí bien, necesitas una función como:
const sortKeys = (obj) => { return Object.keys(obj).sort().reduce((acc, key) => { acc[key] = obj[key]; return acc; }, {});}