Digamos que tienes una clase de JavaScript como esta
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
Digamos que luego crea una serie de instancias de esa clase y las almacena en una matriz
var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
Entonces ahora tendría una matriz de objetos creados por DepartmentFactory
. ¿Cómo utilizaría el array.sort()
método para ordenar esta matriz de objetos por la DepartmentName
propiedad de cada objeto?
El array.sort()
método funciona bien al ordenar una serie de cadenas
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]
Pero, ¿cómo hago para que funcione con una lista de objetos?
javascript
jdavis
fuente
fuente
DepartmentFactory
como constructor, cree sus objetos utilizandonew DepartmentFactory
, de lo contrario, la matriz se llenará con un montón deundefined
valores.Respuestas:
tendrías que hacer algo como esto:
nota: al cambiar la mayúscula (a superior o inferior) se garantiza una clasificación que no distingue mayúsculas de minúsculas.
fuente
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
no voy a editar tu respuesta, esperando que al menos recuerde lo quePara admitir unicode:
fuente
return a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase());
localeCompare
es genial y tiene todo el soporte del navegador para el primer argumento. ¡No está mal!localeCompare
es desviar el trabajo de gestión de la lógica de clasificación y las peculiaridades de la configuración regional al sistema. Si hacer una ordenación que no distingue entre mayúsculas y minúsculas es normal para el entorno local, ya que está en inglés, esto se hará por usted:"Z" > 'a' // false
"Z".localeCompare('a') // 1
si desea desviarse del valor predeterminado del entorno local, puede enviar anulaciones en los parámetroslocales
yoptions
: developer.mozilla. org / es-US / docs / Web / JavaScript / Reference / ...demostración: http://jsfiddle.net/diode/hdgeH/
fuente
fuente
MANIFESTACIÓN
fuente
Esto los ordena alfabéticamente Y no distingue entre mayúsculas y minúsculas. También es súper limpio y fácil de leer: D
fuente
'sensitivity': 'base'
, lo que hace una gran diferencia dependiendo de su aplicación de acuerdo con MDN .fuente
Hazlo asi
fuente
Aquí hay una función simple que puede usar para ordenar una matriz de objetos a través de sus propiedades; no importa si la propiedad es un tipo de cadena o entero, funcionará.
fuente
Debe pasar una función que acepte dos parámetros, los compare y devuelva un número, por lo tanto, suponiendo que desea ordenarlos por ID, escribiría ...
fuente
Después de intentarlo un poco e intentar hacer menos bucles como sea posible, terminé con esta solución:
Demo en codepen
fuente
Una respuesta simple:
Manera ES6:
Si necesita hacerlo en minúsculas / mayúsculas, etc., simplemente haga eso y almacene ese resultado en una variable que compare esa variable. Ejemplo:
fuente