Hola!
Tengo una duda con el sort de javascript y no acabo de verlo claro...
Trato de ordenar un array a partir de varias propiedades del objeto, pero veo que no me está ordenado como yo quiero.
El orden a seguir es:
- topDeal: true
- initialDate: más reciente
- orderSort: más bajo
- duration: menor
- shortTitle: alfábetico
Estoy usando esto:
function comparaPlanes(a,b){
if (a.topDeal == true && b.topDeal == false) {
return -1;
}
if (a.topDeal==false && b.topDeal == true) {
return 1;
}
if (a.topDeal==b.topDeal) {
return 0;
}
if (a.initialDate == null || a.initialDate == ""){
a.initialDate = "2014-01-01";
}
if (b.initialDate == null || b.initialDate == ""){
b.initialDate = "2014-01-01";
}
var aInitialDate = new Date(a.initialDate);
var bInitialDate = new Date(b.initialDate);
if (aInitialDate > bInitialDate){
return -1;
}
if (aInitialDate < bInitialDate){
return 1;
}
if (aInitialDate == bInitialDate){
return 0;
}
if (a.orderSort == null || a.orderSort == ""){
a.orderSort = 999;
}
if (b.orderSort == null || b.orderSort == ""){
b.orderSort = 999;
}
var aInt = parseInt(a.orderSort);
var bInt = parseInt(b.orderSort);
if (aInt < bInt)
return 1;
if (aInt > bInt)
return -1;
if (aInt == bInt){
return 0;
}
var aFinalDate = new Date(a.finalDate);
var bFinalDate = new Date(b.finalDate);
var aDuration = parseInt(aFinalDate.getTime()) - parseInt(aInitialDate.getTime());
var bDuration = parseInt(bFinalDate.getTime()) - parseInt(bInitialDate.getTime());
if (aDuration < bDuration)
return 1;
if (aDuration > bDuration)
return -1;
if (aDuration == bDuration) {
return 0;
}
if (a.shortTitle < b.shortTitle)
return -1;
if (a.shortTitle > b.shortTitle)
return 1;
return 0;
}
Aunque antes tenía: en vez de devolver 0 cada vez que una propiedad es igual, comprobar la siguiente; pero tampoco me ordena como quiero.
Creo que tengo un lío de cojones y estoy bastante bloqueado..
Alguna ayuda?
Gracias