Tengo dos matrices de objetos, son esencialmente copias, pero la matriz de referencia usa un orden diferente.
let result = {"articleData":[{"id":"1","identifier":"Article1"},{"id":"2","identifier":"Article2"},{"id":"3","identifier":"Article3"},{"id":"4","identifier":"Article4"},{"id":"5","identifier":"Article5"},{"id":"6","identifier":"Article6"}]}; let resultReference = {"articleData":[{"id":"3","identifier":"Article3"},{"id":"4","identifier":"Article4"},{"id":"1","identifier":"Article1"},{"id":"2","identifier":"Article2"},{"id":"6","identifier":"Article6"},{"id":"5","identifier":"Article5"}]};Lo que quiero hacer es: actualmente obtengo algunos datos de mi API pero están en el orden incorrecto (cómo están actualmente en la matriz de "resultados"). Quiero que los datos estén exactamente en el mismo orden que la matriz "resultReference", pero ¿cómo puedo lograr esto? ¿Hay un enfoque mínimo?
https://jsfiddle.net/g1rmhq9f/
gracias por cualquier consejo
A continuación se presenta una posible forma de lograr el objetivo deseado.
Fragmento de código
// custom sort method const mySort = (arr, refArr) => ( // use structured-clone to deep-clone "arr" // to avoid mutating/modifying it structuredClone(arr). sort( ( { id: aid }, { id: bid } // de-structure & rename "id" props ) => ( // a's ref-index minus b's ref-index refArr.findIndex(({ id }) => id === aid) - refArr.findIndex(({ id }) => id === bid) ) ) ); let result = {"articleData":[{"id":"1","identifier":"Article1"},{"id":"2","identifier":"Article2"},{"id":"3","identifier":"Article3"},{"id":"4","identifier":"Article4"},{"id":"5","identifier":"Article5"},{"id":"6","identifier":"Article6"}]}; let resultReference = {"articleData":[{"id":"3","identifier":"Article3"},{"id":"4","identifier":"Article4"},{"id":"1","identifier":"Article1"},{"id":"2","identifier":"Article2"},{"id":"6","identifier":"Article6"},{"id":"5","identifier":"Article5"}]}; console.log( "sorted version of result object's articleData array: ", mySort(result?.articleData, resultReference?.articleData) ); .as-console-wrapper { max-height: 100% !important; top: 0 }Explicación
Se agregaron comentarios en línea al fragmento anterior.
Suponiendo que "Quiero que los datos estén exactamente en el mismo orden que la matriz "resultReference"" significa que solo desea que la ID esté en orden ascendente, aquí hay una solución mucho más simple:
let resultReference = {"articleData":[{"id":"3","identifier":"Article3"},{"id":"4","identifier":"Article4"},{"id":"1","identifier":"Article1"},{"id":"2","identifier":"Article2"},{"id":"6","identifier":"Article6"},{"id":"5","identifier":"Article5"}]}; resultReference.articleData.sort(function(a, b) { let id1 = parseInt(a.id); let id2 = parseInt(b.id); return id1 - id2; }) /* Output: { articleData: [ { id: '1', identifier: 'Article1' }, { id: '2', identifier: 'Article2' }, { id: '3', identifier: 'Article3' }, { id: '4', identifier: 'Article4' }, { id: '5', identifier: 'Article5' }, { id: '6', identifier: 'Article6' } ] } */