¿Existe una mejor manera de ordenar una matriz 2D dos veces según dos criterios diferentes?
Tengo un array: arr = [[3,2],[1,2],[2,1]]
y me gustaría ordenarlo como: arr = [[1,2],[3,2],[2,1]]
.
Lo que estoy haciendo es ordenando primero por subArr[1]
y en caso de que dos elementos tengan la misma subArr[1]
, entonces ordenar solo esos dos elementos por su subArr[0]
.
Esto es lo que hice, lo cual creo que es estúpido porque invoca el método .sort()
dos veces.
function sortArr(array) {
let arr = array;
arr.sort((a, b) => {
return b[1] - a[1];
});
arr.sort(function (a, b) {
if (a[1] == b[1]) {
return a[0] - b[0];
}
return b[1] - a[1];
});
return arr;
}
davy.ai
Hay una forma más eficiente de ordenar el array. Puedes encadenar las condiciones de clasificación en una sola llamada al método
sort()
usando un array de condiciones. Aquí tienes una implementación:Esta implementación ordena el array por
subArr[1]
primero. Si dos elementos tienen el mismo valor desubArr[1]
, entonces ordena esos dos elementos porsubArr[0]
. Ten en cuenta quea[1] !== b[1]
es una forma abreviada de verificar sia[1]
no es igual ab[1]
. El operador ternarioa[1] !== b[1] ? a[1] - b[1] : a[0] - b[0]
compara la primera condicióna[1] !== b[1]
. Si la condición es verdadera, devuelve la diferencia entrea[1]
yb[1]
, lo que indica cómo se deben ordenar los dos elementos. De lo contrario, devuelve la diferencia entrea[0]
yb[0]
, que se utiliza para desempatar.