Obtuve una matriz (ver abajo para un objeto en la matriz) que necesito ordenar por nombre usando JavaScript. ¿Cómo puedo hacerlo?
var user = {
bio: null,
email: "[email protected]",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Jonathan Clark
fuente
fuente
Respuestas:
Supongamos que tiene una matriz
users
. Puede usarusers.sort
y pasar una función que tome dos argumentos y compararlos (comparador)Debería volver
En nuestro caso si dos elementos son
a
yb
queremos comparara.firstname
yb.firstname
Ejemplo:
Este código va a funcionar con cualquier tipo.
Tenga en cuenta que en la "vida real" ™ a menudo desea ignorar mayúsculas y minúsculas, clasificar correctamente los signos diacríticos, símbolos extraños como ß, etc. cuando compara cadenas, por lo que es posible que desee utilizarlas
localeCompare
. Ver otras respuestas para mayor claridad.fuente
localeCompare
.¡El código más corto posible con ES6!
¡El soporte básico String.prototype.localeCompare () es universal!
fuente
Algo como esto:
fuente
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
más alta que la cadena'apple'
, lo que hará si no utiliza la función.toLowerCase()
.'Z' < 'a' // true
y'z' < 'a' // false
Si las cadenas comparadas contienen caracteres unicode, puede usar la
localeCompare
función deString
clase como la siguiente:fuente
users.sort((a, b) => a.name.localeCompare(b.name))
Bonito y pequeño ES6 one liner:
fuente
Podemos usar localeCompare pero también debemos verificar las claves para los valores de falsey
El siguiente código no funcionará si falta una entrada en lname.
Por lo tanto, debemos verificar el valor de falsey como se muestra a continuación
O
podemos usar lodash, es muy simple. Detectará los valores devueltos, es decir, ya sea número o cadena, y hará la clasificación en consecuencia.
https://lodash.com/docs/4.17.5#sortBy
fuente
underscorejs ofrece la muy buena función _.sortBy:
o puede usar una función de clasificación personalizada:
fuente
sortBy
Detecta que los valores devueltos son cadenas y, por lo tanto, realiza una clasificación alfabética? GraciasEn caso de que estemos clasificando nombres o algo con caracteres especiales, como ñ o áéíóú (comunes en español), podríamos usar los parámetros locales ( es para español en este caso) y opciones como esta:
Las opciones locales oficiales se pueden encontrar aquí en iana , es (español), de (alemán), fr (francés). Acerca de la base de sensibilidad significa:
fuente
Básicamente, puede ordenar las matrices con el método de clasificación, pero si desea ordenar los objetos, debe pasar la función para ordenar el método de la matriz, por lo que le daré un ejemplo usando su matriz
fuente
else
ser eliminado? De lo contrario, esoreturn 0
nunca se leeráInspirado en esta respuesta,
fuente
Una notación más compacta:
fuente
sign(f(a, b)) =-sign(f(b, a))
(para a = b)a.firstname == b.firstname
debe usarse===
para completarTambién para ambos tipos, asec y desc, puede usar esto: supongamos que tenemos una variable SortType que especifica la clasificación ascendente o descendente que desee:
fuente
Una función generalizada se puede escribir como a continuación
puedes pasar los siguientes parámetros
fuente
tratar
Mostrar fragmento de código
fuente
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Puedes usar esto para objetos
fuente
en palabras simples, puedes usar este método
fuente
Puede usar el método de matriz incorporado -
sort
. Este método toma un método de devolución de llamada como parámetroPuntos clave a tener en cuenta para comprender este código.
myCustomSort
debería devolver +1 o -1 para cada comparación de par de elementos (de la matriz de entrada).toLowerCase()
/toUpperCase()
en el método de devolución de llamada de clasificación personalizado para que la diferencia de mayúsculas y minúsculas no afecte a la corrección del proceso de clasificación.Espero que esto sea una explicación suficientemente clara. Siéntase libre de comentar si cree que se necesita más información.
¡Salud!
fuente
Introdujo las mejores respuestas en un prototipo para ordenar por clave.
fuente
Puedes usar algo similar para deshacerte de mayúsculas y minúsculas
fuente
Mi implementación funciona muy bien en versiones anteriores de ES:
fuente
Solo para el registro, si desea tener una función de clasificación con nombre, la sintaxis es la siguiente:
Tenga en cuenta que lo siguiente NO funciona:
fuente