Tengo una matriz de objetos con propiedades.
Me gustaría ordenar por estado, es decir, 15, 17 y luego 16 por fin en javascript
Para una matriz de objetos, el estado tiene el valor 16
debe colocarse al final y el resto debe ordenarse ascendentemente como la salida esperada.
como hacer en javascript
var result = arrobj.filter(e=>e.details.status !== 16).sort(a, b) => a.status - b.status; var arrobj = [ { "id":1, "name": 'xyz', "details": { "job": 'fulltime', "status": 15 } }, { "id":2, "name": 'abc', "details": { "job": 'partime', "status": 16 } }, { "id":3, "name": 'zen', "details": { "job": 'fulltime', "status": 17 } }, { "id":5, "name": 'abu', "details": { "job": 'fulltime', "status": 16 } }, { "id":7, "name": 'john', "details": { "job": 'parttime', "status": 15 } }, { "id":10, "name": 'jocob', "details": { "job": 'fulltime', "status": 17 } } ] Expected Output [ { "id":1, "name": 'xyz', "details": { "job": 'fulltime', "status": 15 } }, { "id":7, "name": 'john', "details": { "job": 'parttime', "status": 15 } }, { "id":3, "name": 'zen', "details": { "job": 'fulltime', "status": 17 } }, { "id":10, "name": 'jocob', "details": { "job": 'fulltime', "status": 17 } }, { "id":2, "name": 'abc', "details": { "job": 'partime', "status": 16 } }, { "id":5, "name": 'abu', "details": { "job": 'fulltime', "status": 16 } } ]const results = [...arrobj.filter(ob => ob.details.status !== 16).sort((a,b) => a.details.status - b.details.status), ...arrobj.filter(ob => ob.details.status === 16)]¿Te refieres a esto?
Tenías que agregar .status en la función de sort() Para colocar el objeto con el estado 16 al final, hice una matriz separada con el estado 16 y agregué al final de la matriz con todo lo demás.
var result = arrobj.filter(e=>e.details.status !== 16).sort( (a, b) => a.details.status - b.details.status); result = result.concat(arrobj.filter(e=>e.details.status == 16)); console.log(result)Desde EcmaScript 2019, Array.sort es estable. Esto significa que puede dividir esa clasificación compleja en 2: primero por estado y luego colocando todos los elementos con el estado 16 en la parte posterior. Solución no eficiente
arrobj.sort((first,second) => first.details.status - second.details.status) .sort((first, second) => (first.details.status === 16) - (second.details.status === 16));