Ver Mensaje Individual
  #7 (permalink)  
Antiguo 16/07/2012, 23:36
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.403
Antigüedad: 7 años, 2 meses
Puntos: 1566
Respuesta: Como aplicar un ordeno burbuja a una tabla?

Cita:
Iniciado por furoya Ver Mensaje
Un pequeño detalle en ese ejemplo.

sort() ordena alfabeticamente, así que para números hay que hacerle un pequeño ajuste.

Para entender mejor el problema, se pueden usar estos datos

Código:
var puntos = ['300|juan|ford|','500|pedro|toyota|','250|pablo|mercedes|','25|luis|audi|'];
Y después probar el ordenamiento.

Por supuesto, una forma fácil es justamente poner los números con estructura de texto.

Código:
var puntos = ['300|juan|ford|','500|pedro|toyota|','250|pablo|mercedes|','025|luis|audi|'];
Pero de última no cuesta nada agregar una funcioncita para convertir a ordenador de números

Ordenar números
Imperdonable error el mío @furoya, son los vicios de php (que tiene natsort())
Tampoco me rompí mucho la cabeza para solucionarlo, ya que alguien lo hizo por mí.
@milomondo
acá van las correciones
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>Orden dinámico</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. // Créditos de alphanum() para Brian Huisman http://my.opera.com/GreyWyvern/blog/show.dml/1671288
  9. function alphanum(a, b) {
  10.  function chunkify(t) {
  11.    var tz = [], x = 0, y = -1, n = 0, i, j;
  12.    while (i = (j = t.charAt(x++)).charCodeAt(0)) {
  13.      var m = (i == 46 || (i >=48 && i <= 57));
  14.      if (m !== n) {
  15.        tz[++y] = "";
  16.        n = m;
  17.      }
  18.      tz[y] += j;
  19.    }
  20.    return tz;
  21.  }
  22.  var aa = chunkify(a);
  23.  var bb = chunkify(b);
  24.  for (x = 0; aa[x] && bb[x]; x++) {
  25.    if (aa[x] !== bb[x]) {
  26.      var c = Number(aa[x]), d = Number(bb[x]);
  27.      if (c == aa[x] && d == bb[x]) {
  28.        return c - d;
  29.      } else return (aa[x] > bb[x]) ? 1 : -1;
  30.    }
  31.  }
  32.  return aa.length - bb.length;
  33. }
  34.  
  35. function agregar_datos(){
  36. var fila = "";
  37. var contenido_celda;
  38. var tabla = document.getElementById('miTabla');
  39. var pos = tabla.rows.length;
  40. var puntos = ['300|juan|ford|','500|pedro|toyota|','250|pablo|mercedes|','20|luis|audi|','1000|furoya|citröen','1|emprear|peugeot|','345|milomondo|ferrari|']; // esto es lo que hay que construir para obtener los datos
  41. puntos.sort(alphanum); // ordenás
  42. for (i=0; i<puntos.length; i++) {
  43. contenido_celda =puntos[i].split('|');
  44. var filas = tabla.insertRow(pos);
  45. var celda_0 = filas.insertCell(0);
  46. var celda_1 = filas.insertCell(1);
  47. var celda_2 = filas.insertCell(2);
  48. celda_0.innerHTML=contenido_celda[1];
  49. celda_1.innerHTML=contenido_celda[2];
  50. celda_2.innerHTML=contenido_celda[0];
  51. }
  52. }
  53.  
  54. window.onload = agregar_datos;
  55. //]]>
  56. </head>
  57. <table id="miTabla" border="1">
  58. <tr>
  59. <th>Nombre</th>
  60. <th>Escuderia</th>
  61. <th>puntos</th>
  62. </tr>
  63. </body>
  64. </html>


Demo:
http://foros.emprear.com/javascript/natsort-js.html

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.