JavaScript ordenar matriz multidimensional

Migel Hewage Nimesha 15 febrero 2024
  1. Ordenar una matriz unidimensional en JavaScript
  2. Ordenar una matriz multidimensional o una matriz N-D en JavaScript
  3. Conclusión
JavaScript ordenar matriz multidimensional

La clasificación es un método para colocar elementos en orden ascendente o descendente. La clasificación de los elementos se realiza por comparación con otro ítem o elemento.

Ordenar una matriz unidimensional en JavaScript

Para demostrar esto, consideremos una matriz unidimensional como [2,78,4,10,3,59,6] para realizar la clasificación.

Código:

// single-dimensional array
const array = [2, 78, 4, 10, 3, 59, 6];

// sorting in increasing order
const in_array = array.sort((a, b) => {
  return a - b;
})

console.log(in_array);

// sorting in decreasing order
const de_array = array.sort((a, b) => {
  return b - a;
})

console.log(de_array);

El resultado esperado después de la clasificación es el siguiente:

Matriz de ordenación de JavaScript - Salida

Aquí, los elementos se clasifican en orden creciente, lo que significa que los elementos se organizan en orden ascendente. Los elementos de la matriz también se clasifican en orden decreciente, lo que significa que los elementos se organizan en orden descendente.

Usaremos la función de flecha en JavaScript para realizar esta clasificación.

Nota: La función Flecha es una de las funciones introducidas en la versión ES6 de JavaScript. Le permite crear funciones de manera más limpia en comparación con las funciones normales.

Por ejemplo, si esta es la función original:

let testFunction = function(a, b) {
  return a * b;
}

Esta función se puede escribir en una forma más simple de la siguiente manera usando la función de flecha:

let testFunction = (a, b) => a * b;

Ordenar una matriz multidimensional o una matriz N-D en JavaScript

Las matrices multidimensionales se pueden ordenar utilizando el método de matriz sort() de JavaScript. Aquí, las matrices multidimensionales se ordenan según los números de índice de columna.

Demostremos la clasificación tomando una matriz multidimensional como [[0,1,2,0,0], [3,0,0,2,0], [2,0,0,4,6], [0,3,4,0,5], [0,0,3,5,0]].

Código:

// multidimensional array
const multidimensional_array = [
  [0, 1, 2, 0, 0], [3, 0, 0, 2, 0], [2, 0, 0, 4, 6], [0, 3, 4, 0, 5],
  [0, 0, 3, 5, 0]
];

// sorting multidimensional array

multidimensional_array.sort((a, b) => {
  // performing sorting based on 2nd, and 3rd columns of the matrix
  return a[2] - b[2];
})

console.log(multidimensional_array);

La salida recibida después de la clasificación es la siguiente:

Matriz multidimensional de ordenación de JavaScript - Salida 1

Podemos aplicar diferentes métodos o técnicas para ordenar matrices multidimensionales según sea necesario.

Digamos que tenemos la siguiente matriz de matrices.

const array = [['M', 'B', 'M', 'Z', 'B', 'B'], ['B', 'M', 'M', 'B', 'B', 'Z']];

Debemos crear una función de JavaScript que acepte una matriz de este tipo. La función debe usar las reglas a continuación para ordenar internamente el subarreglo de cada matriz suministrada.

  • Si los elementos no son ni M ni B, deben permanecer en su posición.
  • Si el elemento es M o B, se ordenarán alfabéticamente.

Como resultado, el resultado final de la matriz anterior debería aparecer de la siguiente manera:

const output = [['M', 'M', 'M', 'Z', 'M', 'B'], ['B', 'B', 'B', 'B', 'B', 'Z']];

Cabe señalar que los elementos de los subarreglos pueden alterar sus matrices si el algoritmo de clasificación lo requiere.

Código:

const array = [['M', 'B', 'M', 'Z', 'B', 'B'], ['B', 'M', 'M', 'B', 'B', 'Z']];

const custom_sort = (array = []) => {
   const order = [].concat(...array.slice()),
   result = []; order.forEach((element, index) => {
      if (element === 'M') {
         const bIndex = order.indexOf('B');
         if (bIndex < index){
            order[bIndex] = 'M'; order[index] = 'B';
         };
      };
   })
   array.forEach(element => result.push(order.splice(0, element.length)))
   return result;
}
console.log(custom_sort(array));

La consola mostrará el siguiente resultado:

Matriz multidimensional de ordenación de JavaScript - Salida 2

Aquí hay otro enfoque en el que puede ordenar matrices multidimensionales especificando una columna.

Veámoslo usando una matriz como [[21, 'MM'], [76, 'AA'], [90, 'SS'],[03, 'GG']].

Código:

var array = [[21, 'MM'], [76, 'AA'], [90, 'SS'], [03, 'GG']];

array.sort(sort_function);

function sort_function(a, b) {
  if (a[0] === b[0]) {
    return 0;
  } else {
    return (a[0] < b[0]) ? -1 : 1;
  }
}
console.log(array);

La salida del código anterior es la siguiente:

Matriz multidimensional de ordenación de JavaScript - Salida 3

Aquí, se ordenó comparando los elementos en la primera columna de la matriz 2D.

Si es necesario, la matriz multidimensional se puede ordenar comparando los elementos de la segunda columna de la matriz, como en el siguiente ejemplo.

Código:

var array = [[21, 'MM'], [76, 'AA'], [90, 'SS'], [03, 'GG']];

array.sort(sortFunction_col02);

function sortFunction_col02(a, b) {
  if (a[1] === b[1]) {
    return 0;
  } else {
    return (a[1] < b[1]) ? -1 : 1;
  }
}
console.log(array);

El resultado esperado:

Matriz multidimensional de ordenación de JavaScript - Salida 4

Conclusión

La clasificación de matrices multidimensionales puede ordenar y organizar fácilmente los elementos de una matriz comparándolos en columnas en orden ascendente o descendente según sea necesario. Tenga en cuenta que el método sort() utiliza la matriz actual; por lo tanto, la matriz se altera.

La matriz inicial normalmente no se ve afectada por otros métodos de matriz, que devuelven una nueva matriz. Esto es crucial para recordar si utiliza programación funcional y anticipa que las funciones no tendrán efectos secundarios.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

Artículo relacionado - JavaScript Sort