entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ordernar un array de objetos por fecha en Javascript con AngularJS

Saludos, estoy intentando ordenar un array de objetos en base una fecha almacenada dentro de cada objeto pero no consigo que ordene, simplemente me devuelve el siguiente error

TypeError: Cannot read property '1' of undefined

La estructura del array es la siguiente

buildsToFilter.builds = {builds: 
count: "3"
href: "mocks/builds/"
build:[
    {'_id': '6384', 'name': Mock1, 'builDate': 20150302T110232},
    {'_id': '6383', 'name': Mock2, 'builDate': 20150209T130212},
    {'_id': '6382', 'name': Mock3, 'builDate': 20150103T145212}]
};

Y este es el código javascript que uso para intentar ordenar el array:

    $scope.sortByDate = function (array) {
        console.log('Function!');
        console.log(array);
        array.sort(function(a, b) {
            a = new Date(a.builDate);
            b = new Date(b.builDate);
            return a>b ? -1 : a<b ? 1 : 0;
        });
    }

Y asi llamo a la funcion:

buildsToFilter.builds.build = $scope.sortByDate(buildsToFilter.builds.build);

1 Respuesta

3votos

white Puntos75820

Podrias poner la linea del error que te da en consola?

no estoy seguro del formato de tus fechas, intenta primero formatearlas correctamente, prueba con esta funcion:

$scope.sortByDate = function (array) {

    var parse = function(date)
    {
        var periods = {
                'Year' : [[0, 4], '-'],
                'Month' : [[4, 2], '-'],
                'day' : [[6, 2], 'T'],
                'hour' : [[9, 2], ':'],
                'minute' : [[11, 2], ':'],
                'second' : [[13, 2], null]
            },
            output = new String();

        for( var period in periods )
        {
            var offset = periods[period][0],
                separator = periods[period][1] || '';

            output += (date.substr(offset[0], offset[1]) + separator);
        }

        return new Date(output);
    }

    return array.sort(function(a, b) {
        a = parse(a.builDate);
        b = parse(b.builDate);

        return a > b ? -1 : a < b ? 1 : 0;
    });
};

reviza que la propiedad buildDate sea una cadena,

'builDate': '20150302T110232'

0voto

Negimaru comentado

Gracias, precisamente me fallaba la conversion, en cuanto puse tu función por fin la detecto correctamente.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta