Foros del Web » Programando para Internet » Javascript »

Ordenamiento de vectores!!!???

Estas en el tema de Ordenamiento de vectores!!!??? en el foro de Javascript en Foros del Web. Hola miren, estoy trando de ordenar una columna de una tabla de mayor a menor o viceversa, se ordena perfecto cuando ordeno SOLO ese vector, ...
  #1 (permalink)  
Antiguo 20/11/2004, 14:08
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
Pregunta Ordenamiento de vectores!!!???

Hola miren, estoy trando de ordenar una columna de una tabla de mayor a menor o viceversa, se ordena perfecto cuando ordeno SOLO ese vector, pero obviamente al ordenar unos datos debo ordenar los datos de las otras columnas mediante un índice. Es lo que hago en esta funcion, miren:
Código PHP:
 function orden(v,ind)
{
    
cota 9;
    
1;
    while (
k)
    {
        
0;
        for (
i=0;i<cota;i++)
        {
            if (
v[i] < v[i+1])
            {
                
aux ind[i];
                
ind[i] = ind[i+1];
                
ind[i+1] = aux;
                
i;
            }
        }
        
cota k;
    }
    return 
ind;

Como ven, ordeno el indice y luego le apunto a los vectores que deseo ordenar con ese indice, pero no se ordena!!!!
Aca sta la otra parte donde pongo los datos en la tabla
Código PHP:
 vord orden(ptsT2indice);
    for (
i=0;i<10;i++)
    {
        
vord[i];
        
porcb[i].innerHTML porcT2[j];
        
ptsb[i].innerHTML ptsT2[j];
        
jugb[i].innerHTML jugT2[j];
        
totb[i].innerHTML totT2[j];
        
winb[i].innerHTML winT2[j];
        
losb[i].innerHTML losT2[j];
    } 
Aclaro que el indice es un vector del 0 al 9

Última edición por SiR.CARAJ0DIDA; 20/11/2004 a las 14:10
  #2 (permalink)  
Antiguo 20/11/2004, 14:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola SiR.CARAJ0DIDA:

Un vector normal puedes ordenarlo directamente con el método de los vectores sort...

var vectorOrdenado = vectorDesordenado.sort();

Y si el array es de objetos, tal vez te sirva crearte un ordenador:

Array.prototype.ordenar = function(elemento) {
var yo = this;
for (var i = 0, mayor = yo.length - 1; i < mayor; i ++)
for (var j = i + 1; j < yo.length; j ++)
if (yo[i][elemento] > yo[j][elemento]) {
temp = yo[i];
yo[i] = yo[j];
yo[j] = temp;
}
return yo;
}

Lo he probado en este array:

var fotos = new Array();
fotos[0] = new Foto('fotos/maxi/Diapositiva52.jpg', '640x480', '01/01/2004', 'La Concepción', 'env=1');
fotos[1] = new Foto('fotos/maxi/Diapositiva62.jpg', '640x480', '03/02/2004', 'La Concepción', 'env=0');
fotos[2] = new Foto('fotos/maxi/Diapositiva66.jpg', '640x480', '02/01/2004', 'La Concepción', 'env=1');
fotos[3] = new Foto('fotos/maxi/Diapositiva73.jpg', '640x480', '04/04/2004', 'La Concepción', 'env=0');

y el Objeto Foto lo tengo declarado así:

function Foto(URL, tam, fecha,comentario, opciones) {
this.URL = URL;
this.tam = tam;
this.fecha = fecha;
this.comentario = comentario;
this.opciones = opciones;
}

Los usos posibles serían:

fotos.ordenar("URL")
fotos.ordenar("fecha")
fotos.ordenar("comentario")
...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 20/11/2004, 15:17
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
gracias por todo eso pero no entiendo nada... la cosa es que uso sort() y me ordena un vector de que forma?? mayor a menor o al reves?? y como apunto a los demas vectores que no se ordenaron?? por ejemplo tengo una columna de nombres y otra columna de sueldos, ordeno los sueldos pero como se a quien le corresponde cada uno??
  #4 (permalink)  
Antiguo 21/11/2004, 03:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Te he preparado esta página: http://www.pepemolina.com/pruebas/ordenarArrays.html

Si no quieres entrar pongo aquí el contenido:
Código:
<html>
<head>
<script type="text/javascript">
var destripe = ["apellidos", "nombre", "direccion", "sueldo"];
function empleado(apellidos, nombre, direccion, sueldo)	{
	this.apellidos = apellidos;
	this.nombre = nombre;
	this.direccion = direccion;
	this.sueldo = sueldo;
}

Array.prototype.ordenar = function(esto)	{
	var yo = this;
	for (var i = 0, mayor = yo.length - 1; i < mayor; i ++)
		for (var j = i + 1; j < yo.length; j ++)
			if (yo[i][esto] < yo[j][esto])	{
				temp = yo[i];
				yo[i] = yo[j];
				yo[j] = temp;
			}
	return yo;
}

var empleados = new Array();
empleados[0] = new empleado("Molina", "Pepe", "Torremolinos", 100000000000);
empleados[1] = new empleado("García", "Paco", "Madrid", 100000000);
empleados[2] = new empleado("Sánchez", "Alberto", "Barcelona", 1000000000);

var ordenado = "";
var ascendente = "▼";
var descendente = "▲";
var neutro = "&nbsp;";
var ordenAscendente = true;

function ordenando(datos)	{
	if (datos == ordenado)	{
		ordenAscendente = !ordenAscendente;
		empleados = empleados.reverse();
		document.getElementById("span" + datos).innerHTML = (ordenAscendente) ? descendente : ascendente;
	}
	else	{
		if (ordenado != "")
			document.getElementById("span" + ordenado).innerHTML = neutro;
		ordenado = datos;
		empleados = empleados.ordenar(ordenado);
		document.getElementById("span" + datos).innerHTML = descendente;
		ordenAscendente = true;
	}
	var filas = document.getElementById("tabla").getElementsByTagName("tbody")[0].getElementsByTagName("tr");
	for (var i = 0; i < filas.length; i ++)	{
		estaFila = filas[i];
		for (var j = 0; j < estaFila.cells.length; j ++)
			filas[i].cells[j].innerHTML = empleados[i][destripe[j]];
	}
		
}

</script>
</head>
<body >
<table id="tabla" style="width: 100%;" border=1 >
<thead>
<tr>
<script type="text/javascript">
	for (var i = 0; i < destripe.length; i ++)	{
		escribir = "<th style='width: 25%; background-color: #eeeeee; color: gray;' onclick=ordenando('" + destripe[i] + "') > ";
		escribir += destripe[i];
		escribir += " <span id='span" + destripe[i] + "' > ";
		escribir += (destripe[i] == ordenado) ? ascendente : neutro;
		escribir += " </span> </th>";
		document.write(escribir);
	}
</script>

</tr>
</thead>
<tbody>
<script type="text/javascript">
	for (i = 0; i < empleados.length; i ++)	{
		document.write("<tr>");
		for (var j = 0; j < destripe.length; j ++)
			document.write("<td >" + empleados[i][destripe[j]] + "</td>");
		document.write("</tr>");
	}
</script>
</tbody>
</table>
</body>
</html>
Supongo que las filas de cada tabla las recogerás de una base de datos... ...
Si es así, para que funcione bien el script tendrías que crear los objetos en el head y luego tan solo hacer las variaciones que consideres oportunas en el diseño (colores y esas cosas)

<script >
var empleados = new Array();
<?php
for ($i = 0; $i < count($rows); $i ++) {
echo "\nempleados[$i] = ['$rows[$i][apellido]', ";
echo "'$rows[$i][nombre]', ";
echo "'$rows[$i][direccion]', ";
echo "'$rows[$i][sueldo]'];";
}
?>

En php me parece que es algo así, pero ese tratamiento, seguro que tú lo sabes mejor que yo (también depende del lenguaje que uses en el servidor).

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 00:02.