recorrer objetos objeto metodos eliminar elementos elemento buscar array agregar javascript arrays sorting lodash

objetos - metodos javascript



Clasificar matriz de objetos JavaScript por valor de propiedad (2)

Esta pregunta ya tiene una respuesta aquí:

Tengo una matriz de objetos de JavaScript. Mi arreglo se define así:

var myObjects = [ { id: ''1'', username: ''bill.jones'', active: true, createdon: ''03/29/2014'' }, { id: ''2'', username: ''woohoo'', active: true, createdon: ''03/28/2014'' }, { id: ''3'', username: ''someuser'', active: true, createdon: ''03/30/2014'' } ];

Esta matriz está realmente poblada dinámicamente. Aún así, debo ordenar los resultados por el valor creado en orden ascendente. Para hacer eso, estoy tratando de usar lodash. El valor createdon representa una fecha. Actualmente, estoy intentando lo siguiente:

// ORDER BY createdOn myObjects.sort(function (a, b) { var date1 = new Date(a[''createdon'']); var date2 = new Date(b[''createdon'']); return date1 < date2; }); _.forEach(myObjects, function(result) { console.log(result); });

Desafortunadamente, myObjects aún no está ordenado después de ejecutar esta función. ¿Qué estoy haciendo mal?

¡Gracias!


Acabo de revisar lodash doc, y tal vez podrías intentar sortBy

Pruébalo: http://jsfiddle.net/3Wza8/

var myObjects = [ { id: ''1'', username: ''bill.jones'', active: true, createdon: new Date(''03/29/2014'') }, { id: ''2'', username: ''woohoo'', active: true, createdon: new Date(''03/28/2014'') }, { id: ''3'', username: ''someuser'', active: true, createdon: new Date(''03/30/2014'') } ]; myObjects = _.sortBy(myObjects, ''createdon''); _.forEach(myObjects, function (result) { console.log(result); });

EDITAR: como señaló Cookie Monster, es importante que su campo createdon una fecha, y no una cadena.


El problema es que ese sort espera una función que devuelva -1, 0 o 1. Su función solo devuelve 0 y 1.

Este ligero cambio debería solucionarlo:

myObjects.sort(function (a, b) { var date1 = new Date(a[''createdon'']); var date2 = new Date(b[''createdon'']); return date1 - date2; });