Foros del Web » Programando para Internet » Javascript »

funcion para hacer un sort numerico

Estas en el tema de funcion para hacer un sort numerico en el foro de Javascript en Foros del Web. hola estoy usando un framework que me facilita un datagrid. Ya trae la funcion sort integrada pero para mi columna de precios no me sirve, ...
  #1 (permalink)  
Antiguo 17/04/2013, 15:08
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 9 años, 6 meses
Puntos: 23
funcion para hacer un sort numerico

hola

estoy usando un framework que me facilita un datagrid. Ya trae la funcion sort integrada pero para mi columna de precios no me sirve, entonces estuve leyendo y permite hacer tu propia funcion para el sort, pero ya no entiendo muy bien y es por eso que necesito su ayuda.

Por ejemplo asi me acomoda la funcion nativa la columna de importes:

Código:
$82,273.58 
$8,620.00 
$7,820.00 
$6,590.22 
$6,506.84 
$6,100.00 
$56,597.35 
$48,544.34 
$48,416.53 
$44,175.94 
$3,904.10 
$3,898.50 
$21,001.24 
$20,550.72 
$2,774.00
y necesito que me muestre:

Código:
$82,273.58 
$56,597.35 
$48,544.34 
$48,416.53 
$44,175.94 
$21,001.24 
$20,550.72 
$8,620.00 
$7,820.00 
$6,590.22 
$6,506.84 
$6,100.00 
$3,904.10 
$3,898.50 
$2,774.00
trae un ejemplo de funcion pero para fechas:

Código Javascript:
Ver original
  1. sorter:function(a,b){
  2.       a = a.split('-');
  3.       b = b.split('-');  
  4.       if (a[2] == b[2]){  
  5.             if (a[0] == b[0]){  
  6.                 return (a[1]>b[1]?1:-1);  
  7.             } else {  
  8.                 return (a[0]>b[0]?1:-1);  
  9.             }  
  10.       } else {  
  11.           return (a[2]>b[2]?1:-1);  
  12.       }  
  13. }

trate de adaptarla para el sort numerico:

Código Javascript:
Ver original
  1. sorter:function(a,b){  
  2.       if(a>b){
  3.         return (-1);
  4.       } else{
  5.             return (1);
  6.       }
  7. }

Pero sigue acomodando igual
  #2 (permalink)  
Antiguo 17/04/2013, 15:14
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 14 años, 7 meses
Puntos: 836
Respuesta: funcion para hacer un sort numerico

Primero debes convertir a número para luego hacer la comparación, algo como:
Código Javascript:
Ver original
  1. return (parseFloat(a.replace(/[^\d.]+/g, '')) > parseFloat(b.replace(/[^\d.]+/g, '')) ? : 1 : -1);
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/04/2013, 09:56
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 9 años, 6 meses
Puntos: 23
Respuesta: funcion para hacer un sort numerico

hola david, gracias por tu respuesta

probe tu codigo pero me marca error en el replace y se lo quite mejor, quedando asi:

Código Javascript:
Ver original
  1. return alert(((parseFloat(a) > parseFloat(b)) ? 1 : -1));

Pero pasa que sigue acomodando mal. No se no esta tomando el parse o no se que, mira asi es la funcioncita:

Código Javascript:
Ver original
  1. <th field="costo_unitario" width="90" rowspan="2"
  2.  
  3.     data-options="
  4.        align:'right',
  5.        formatter:formatPrice,
  6.        sorter:function(a,b){
  7.            return alert(((parseFloat(a) > parseFloat(b)) ? 1 : -1));
  8.        }
  9.    " sortable="true">
  10.  
  11.     Costo</th>

Este es el tutorial del framework que ocupo:

Para agregar el sorting nativo:

http://www.jeasyui.com/tutorial/datagrid/datagrid8.php

Y para el sorting personalizado:

http://www.jeasyui.com/tutorial/datagrid/datagrid14.php

que podra ser?
  #4 (permalink)  
Antiguo 18/04/2013, 11:31
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.712
Antigüedad: 14 años, 7 meses
Puntos: 836
Respuesta: funcion para hacer un sort numerico

Había un caracter (:) sobrando, si miras en la Consola de Errores es fácil detectar esos problemas:
Código Javascript:
Ver original
  1. return (parseFloat(a.replace(/[^\d.]+/g, '')) > parseFloat(b.replace(/[^\d.]+/g, '')) ? 1 : -1);
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 19/04/2013, 10:44
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 9 años, 6 meses
Puntos: 23
Respuesta: funcion para hacer un sort numerico

hola david,

mira asi tengo la funcion:

Código Javascript:
Ver original
  1. <th field="costo_unitario" width="90" rowspan="2"
  2.     data-options="
  3.        align:'right',
  4.        formatter:formatPrice,
  5.        sorter:function(a,b){
  6.            return (parseFloat(a.replace(/[^\d.]+/g, '')) > parseFloat(b.replace(/[^\d.]+/g, '')) ? 1 : -1);
  7.        }
  8.    " sortable="true">
  9.     Costo</th>

Se supone que ya convertidos los parametros a b deberia hacer el ordenamiento numerico, pero me sigue ordenando:

Código:
$82,273.58
$8,620.00 
$7,820.00 
$6,590.22 
$6,506.84 
$6,100.00 
$56,597.35
$48,544.34
$48,416.53
$44,175.94
$3,904.10 
$3,898.50 
$21,001.24 
$20,550.72 
$2,774.00
Por que sera?

Etiquetas: funcion, numerico, sort
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:13.