Cita:
Iniciado por furoya 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<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> //<![CDATA[
// Créditos de alphanum() para Brian Huisman http://my.opera.com/GreyWyvern/blog/show.dml/1671288
function alphanum(a, b) {
function chunkify(t) {
var tz = [], x = 0, y = -1, n = 0, i, j;
while (i = (j = t.charAt(x++)).charCodeAt(0)) {
var m = (i == 46 || (i >=48 && i <= 57));
if (m !== n) {
tz[++y] = "";
n = m;
}
tz[y] += j;
}
return tz;
}
var aa = chunkify(a);
var bb = chunkify(b);
for (x = 0; aa[x] && bb[x]; x++) {
if (aa[x] !== bb[x]) {
var c = Number(aa[x]), d = Number(bb[x]);
if (c == aa[x] && d == bb[x]) {
return c - d;
} else return (aa[x] > bb[x]) ? 1 : -1;
}
}
return aa.length - bb.length;
}
function agregar_datos(){
var fila = "";
var contenido_celda;
var tabla = document.getElementById('miTabla');
var pos = tabla.rows.length;
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
puntos.sort(alphanum); // ordenás
for (i=0; i<puntos.length; i++) {
contenido_celda =puntos[i].split('|');
var filas = tabla.insertRow(pos);
var celda_0 = filas.insertCell(0);
var celda_1 = filas.insertCell(1);
var celda_2 = filas.insertCell(2);
celda_0.innerHTML=contenido_celda[1];
celda_1.innerHTML=contenido_celda[2];
celda_2.innerHTML=contenido_celda[0];
}
}
window.onload = agregar_datos;
//]]>
<table id="miTabla" border="1">
Demo:
http://foros.emprear.com/javascript/natsort-js.html
Saludos