Cómo Ordenar un Array en Javascript
Para ordenar array en javascript debes hacer uso del método sort
, el cual está incluido en javascript por defecto.
Para ello, debes restar cada valor (actual, siguiente) y dependiendo del orden de la resta, se ordenará de forma ascendente actual - siguiente
o descendente siguiente - actual
.
A continuación, te muestro cómo ordenar arrays simples y arrays de objetos o listas de objetos.
Ordenar Array Simple
Para ordenar un array simple solo debes comparar los valores mediante una resta o función específica como lo veremos a continuación.
Array de Números
Está comparación se hace restando los números.
const arr = [1, 3, 2]
arr.sort((curr, next) =>curr - next) // [1, 2, 3]
arr.sort((curr, next) =>next - curr) // [3, 2, 1]
Array de Strings (Texto)
En este caso la comparación se hace mediante la función localeCompare
de los strings.
const arr = ['a', 'c', 'b']
arr.sort((curr, next) =>curr.localeCompare(next)) // ['a', 'b', 'c']
arr.sort((curr, next) =>next.localeCompare(curr)) // ['c', 'b', 'a']
Array de Booleanos (true, false)
En este caso poco usual, debes tener en cuenta que un booleano se caracteriza por ser 1 si es true
y 0 si es falso
, por lo que la comparación se hace transformando los booleanos a números.
const arr = [true, false, true]
arr.sort((curr, next) =>Number(next) - Number(curr)) // [true, true, false]
arr.sort((curr, next) =>Number(curr) - Number(next)) // [false, true, true]
Ordenar Array de Objetos
De igual manera, si quieres ordenar una array de objetos, debes usar sort
, pero seleccionando la llave que quieres comparar.
const arr = [
{ name: 'Francisco', age: 28, verified: true },
{ name: 'Javier', age: 21, verified: false },
{ name: 'Fernando', age: 21, verified: false },
]
arr.sort((curr, next) =>curr.name.localeCompare(next.name)) // sorted ascending by 'name'
arr.sort((curr, next) =>next.name.localeCompare(curr.name)) // sorted descending by 'name'
arr.sort((curr, next) =>curr.age - next.age) // sorted ascending by 'age'
arr.sort((curr, next) =>next.age - curr.age) // sorted descending by 'age'
arr.sort((curr, next) =>Number(curr.verified) - Number(next.verified)) // sorted ascending by 'verified'
arr.sort((curr, next) =>Number(next.verified) - Number(curr.verified)) // sorted descending by 'verified'
Sugerencias
Antes de ordenar un array te recomiendo sacar una copia o clonar el array para usar la versión no ordenada del array si es necesario, debido a que, el método sort
modifica el array directamente y no genera un array con el resultado.