Re ordenar una lista

13 views
Skip to first unread message

DiegoUG

unread,
Apr 23, 2015, 11:15:36 AM4/23/15
to nodejs-es
Hola, esta pregunta la hago aquí porque mi problema lo tengo en node, pero creo que es mas javascript, si alguno tiene idea de como solucionar este problema seria genial.

tengo una lista
[{'order':0,'name':'a'},{'order':1,'name':'b'},{'order':2,'name':'c'}]

y uno de los elementos cambia su orden, en este caso 0 subió a 1, como hago para q

--
  Diego Alonso Uribe Gamez

Desarrollador web

Twitter: @DiegoUG

Google+: +DiegoAlonsoUribeGamez



DiegoUG

unread,
Apr 23, 2015, 11:17:26 AM4/23/15
to nodejs-es
se fue sin terminar,

Uno de los elementos cambia su orden, en este caso 0 subió a 1, como hago para que el que esta en 1 pase a 0, usando un algoritmo?

[{'order':0,'name':'b'},{'order':1,'name':'a'},{'order':2,'name':'c'}]

Angel Java Lopez

unread,
Apr 23, 2015, 11:25:20 AM4/23/15
to node...@googlegroups.com
Una forma posible, escrito a mano alzada, hacerlo todo en una funcion

function downItem(list, norder)
{
    list.forEach(function (item) {
         if (item.order == norder)
              item.order--;
         else if (item.order == norder - 1)
              item.order++;
    });
}

Se puede generalizar a

function move(list, norder, delta)

donde delta seria bueno que sea 1 o -1

Jejeje claro que lo haria todo con TDD ;-)

Nos leemos!

Angel "Java" Lopez
@ajlopez


--
Has recibido este mensaje porque estás suscrito al grupo "NodeJS ES" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a nodejs-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

David Roncancio

unread,
Apr 23, 2015, 1:19:59 PM4/23/15
to node...@googlegroups.com
Yo casi siempre uso esta librería para todo lo que tenga que ver con listas

de acuerdo al código de ellos esta seria la implementación (http://underscorejs.org/docs/underscore.html)

_.sortBy = function(obj, iteratee, context) {
    iteratee = cb(iteratee, context);
    return _.pluck(_.map(obj, function(value, index, list) {
      return {
        value: value,
        index: index,
        criteria: iteratee(value, index, list)
      };
    }).sort(function(left, right) {
      var a = left.criteria;
      var b = right.criteria;
      if (a !== b) {
        if (a > b || a === void 0) return 1;
        if (a < b || b === void 0) return -1;
      }
      return left.index - right.index;
    }), 'value');
  };

cordialmente, 

David Roncancio
(+57) 3014311354
Reply all
Reply to author
Forward
0 new messages