Ordenar matrices en JavaScript

Sí, ya se que el título no parece prometer gran cosa. Ordenar una matriz en JavaScript es un simpleza. Basta con un matriz.sort() y, hala, ya está ordenada… ¿O no?. Sí, si se trata de una matriz “normal” de JavaScript. Sabemos que JavaScript, de forma nativa, sólo gestiona matrices unidimensionales, indexadas. Son un modelo de colección de datos inherentemente simple, en el que cada dato tiene un índice que lo identifica. Estos índices son numéricos, consecutivos, empezando desde 0. Realmente, es un modelo simple y, a la postre, insuficiente para cubrir muchas necesidades de hoy en día. Si quieres una matriz bidimensional, en realidad, lo que manejas es una matriz de matrices. Cada elemento de la matriz bidimensional es, a su vez, una simple matriz unidimensional. Además, si quieres una matriz asociativa, al estilo de las que maneja, por ejemplo, PHP, ya tienes que recurrir a parsear un objeto JSON. Y ahora viene lo bueno. Si tienes una matriz bidimensional asociativa (creada a partir de un JSON), y quieres ordenar sus elementos por uno de los campos de forma que se mantengan las relaciones de los demás elementos, ¿cómo hacerlo? Vamos a ello.

La tecnología JSON

La tecnología JSON (leáse “JOTASON”, o “YEISON” si tienes inclinación anglófila) es un formato de intercambio de datos concebido para ser una alternativa al popular XML, sobre todo entre aplicaciones web que emplean dichos datos desde JavaScript. De hecho, el peculiar nombre procede de JavaScript Object Notation (casi nada). Es un formato muy universal ya que permite, por ejemplo, que tu página web recoja por Ajax una colección de datos de una API Rest de un tercero. De esta forma, tu puedes compartir tus datos, o leer los de terceros e incorporarlos al javascript de tu web. En la actualidad ocupa un lugar destacado en el amplio mapa de tecnologías web, dada la sencillez propia del formato, su sencillez de uso (es muchísimo más fácil escribir, leer y procesar datos en entorno web en JSON que en XML) y el poco peso de estos datos, lo que agiliza su transmisión entre aplicativos web.