Estoy tratando de averiguar cómo ordenar una matriz de objetos según si el valor de una propiedad en una matriz anidada de objetos contiene el valor stopped . Cuando ese valor existe en cualquier matriz anidada de objetos, necesito que el objeto principal se ordene en la parte superior, desde allí, estoy tratando de ordenar secundariamente esa lista ordenada por id .
const arr = [{ id: 1, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, ], }, { id: 2, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'stopped', }, ], }, { id: 3, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, ], } ] // desired result [{ id: 2, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'stopped', }, ], }, { id: 1, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, ], }, { id: 3, things: [{ thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, { thing_id: 1, status: 'started', }, ], } ]arr.sort((a, b) => { const stoppeds_in_a = a.things.map(obj => obj.status).filter(status => status === 'stopped').length const stoppeds_in_b = b.things.map(obj => obj.status).filter(status => status === 'stopped').length // I want that who has more 'stoppeds' occurrences first return stoppeds_in_b - stoppeds_in_a }) const checkStopped = (things) => things.some((el) => el.status === 'stopped'); const desired = arr.sort((a, b) => checkStopped(b.things) - checkStopped(a.things));arr.sort((a, b) => { if (a.things.some(thing => thing.status === "stopped")) { return -1; } else { return a.id - b.id; } });Simplemente tiene que ordenar, verificando que el objeto actual que se está inspeccionando tenga al menos una "cosa" con un estado "detenido", de lo contrario, un orden numérico normal.