Si tengo una lista de objetos:

var objectList= LIST_OF_OBJECT;

Cada objeto en la lista contiene tres atributos: " nombre ", " fecha ", " género "

¿Cómo ordenar los objetos en la lista por orden ascendente del atributo " fecha "?

(el atributo " fecha " contiene un valor de cadena como "2002-08-29 21: 15: 31 + 0500")

5
Leem 22 sep. 2011 a las 14:05

4 respuestas

La mejor respuesta

El Array.sort método acepta una función de clasificación, que acepta dos elementos como argumentos y debería devolver:

  • <0 si el primero es menor que el segundo
  • 0 si el primero es igual al segundo
  • > 0 si el primero es mayor que el segundo.

.

objectList.sort(function (a, b) {
    var key1 = a.date;
    var key2 = b.date;

    if (key1 < key2) {
        return -1;
    } else if (key1 == key2) {
        return 0;
    } else {
        return 1;
    }
});

Tienes suerte de que, en el formato de fecha que has proporcionado, una fecha anterior a otra fecha también sea < que la fecha cuando utilizas las comparaciones de cadenas. Si este no fuera el caso, primero tendría que convertir la cadena a una fecha:

objectList.sort(function (a, b) {
    var key1 = new Date(a.date);
    var key2 = new Date(b.date);

    if (key1 < key2) {
        return -1;
    } else if (key1 == key2) {
        return 0;
    } else {
        return 1;
    }
});
6
Matt 22 sep. 2011 a las 10:07
yourArray.sort(function(a, b) { 
 a = new Date(a.date);
 b = new Date(b.date);
 return a >b ? -1 : a < b ? 1 : 0;
})
1
RredCat 12 jun. 2017 a las 20:41

Puedes probar:

<script src="https://cyberknight.000webhostapp.com/arrange.js">
var a =[-1,0,5,4,3,2,6,1,1];
var b = totzarrange(a)
console.log(b);
</script>
0
as sdfas 30 abr. 2017 a las 10:56

Si sus objetos tienen la información de fecha dentro de un campo Cadena :

yourArray.sort(function(a, b) { return new Date(a.date) - new Date(b.date) })

O, si lo tienen dentro de un campo Fecha :

yourArray.sort(function(a, b) { return a.date - b.date })
8
turdus-merula 20 ene. 2014 a las 21:06