Necesita ayuda para el siguiente escenario
000-2022, 000-2023, 005-2021, 000-2021, 003-2021, 004-2022, 007-2021
los últimos 4 dígitos son el año y los 3 dígitos del medio son el número de prioridad. Necesito que esto se ordene con el año más alto primero y debajo de él debe venir el número de prioridad correspondiente de ese año y luego debe pasar al siguiente año menor.
Resultado Esperado :
000-2023, 000-2022, 004-2022, 000-2021, 003-2021, 005-2021, 007-2021
Por aquí
let arr = ['000-2022', '000-2023', '005-2021', '000-2021', '003-2021', '004-2022', '007-2021'] arr.sort( (a,b)=> { let [aN,aY] = a.split('-').map(Number) , [bN,bY] = b.split('-').map(Number) return aY - bY || aN - bN }) console.log( arr ) .as-console-wrapper {max-height: 100%!important;top:0 }Use la función sort() para ordenar. Y usa la función split() para dividir la cadena.
let arr = ["000-2022", "000-2023", "005-2021", "000-2021", "003-2021", "004-2022", "007-2021"] arr.sort((a,b)=>{ let [aPriority,aYear] = a.split("-").map(it => Number(it)); let [bPriority,bYear] = b.split("-").map(it => Number(it)); return bYear > aYear ? 1 : aYear > bYear ? -1 : (aPriority - bPriority); }); console.log(arr);Recomiendo encarecidamente desinfectar los datos de entrada primero en un formato estructurado. Entonces el código de clasificación será mucho más fácil de entender.
Aquí hay un ejemplo:
a = ["000-2022", "000-2023", "005-2021", "000-2021", "003-2021", "004-2022", "007-2021"] structured = a.map((e) => { [priority, year] = e.split("-") return {priority, year} }) // `sort()` changes the array in place, so there's no need for a new var structured.sort((e1, e2) => { if (e1.year !== e2.year) { // year is different, so sort by that first return e1.year < e2.year && 1 || -1 } else { // if year is the same, sort by priority return e1.priority < e2.priority && 1 || -1 } }) console.log(structured)