Quiero ordenar una matriz de objetos por id y name .
Data de muestra:
[ { "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ] ¿Quiero ordenar por id y el campo de name en el objeto del case ? ¿Es posible utilizar dos criterios en orden?
Resultado Esperado:
[ { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple2" }, "id": 6 }, { "case": { "name": "Exemple3" }, "id": 4 } ]¿Cómo puedo usar dos criterios en mi clasificación?
Seguro que es posible.
El método Array#sort toma un parámetro opcional llamado compareFunction que representa la lógica a realizar cuando se ordenan dos elementos en la matriz.
Al pasar una función que compara primero por case.name y luego por id , puede ordenar su matriz según ambos criterios. Aquí hay un ejemplo simple, aunque es probable que desee agregar la verificación de errores para que no intente leer una propiedad undefined .
const unsortedData = [ { "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ]; const sortedData = unsortedData.sort((a, b) => { if (a.case.name > b.case.name) return 1; if (a.case.name < b.case.name) return -1; if (a.id > b.id) return 1; if (a.id < b.id) return -1; return 0; }); console.dir(sortedData);Puede usar array#sort con comparador personalizado. Puede usar OR condicional para comparar en múltiples condiciones.
arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id) const arr = [{ "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ]; arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id); console.log(arr); .as-console-wrapper { max-height: 100% !important; top: 0; }