Foros del Web » Programando para Internet » Javascript »

Ordenar array multidimensional en javascript.

Estas en el tema de Ordenar array multidimensional en javascript. en el foro de Javascript en Foros del Web. Buenos días. Hoy vengo con una nueva consulta, mi duda es ¿Cómo puedo ordenar array multidimensionales en javascript? Tengo el siguiente array: Código: var datos ...
  #1 (permalink)  
Antiguo 04/03/2010, 03:09
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 0
Ordenar array multidimensional en javascript.

Buenos días.

Hoy vengo con una nueva consulta, mi duda es ¿Cómo puedo ordenar array multidimensionales en javascript?

Tengo el siguiente array:

Código:
var datos = new Array();
datos[0] = new Array(1,"Ramón","[email protected]");
datos[1] = new Array(2,"Jose","[email protected]");
datos[2] = new Array(3,"Manuel","[email protected]");
Me gustaría saber como puedo ordenarlo por nombre, gracias!!
  #2 (permalink)  
Antiguo 04/03/2010, 04:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ordenar array multidimensional en javascript.

tienes que usar la funcion sort de los array y pasarle una funcion anonima para ordernarlo. en tu caso, la funcion anonima tiene que comparar la segunda posicion de cada array interno.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 04/03/2010, 04:56
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 0
Respuesta: Ordenar array multidimensional en javascript.

Podrías poner un ejemplo, por favor?

^^
  #4 (permalink)  
Antiguo 04/03/2010, 05:08
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ordenar array multidimensional en javascript.

Código:
// usando el array que tienes de ejemplo;
datos.sort(function(a, b){
// aqui dentro realizas la comparacion de cada nombre;
});
en la funcion anonima, los argumentos (a, b) hacen referencia a cada elemento del array datos. dado que los elementos a su vez son array, la posicion a[1] y b[1] son los nombres. con esas referencias es que tienes que hacer la comparacion. en la comparacion, debes devolver -1, 0, o 1 segun debe aparecer antes, despues o no se altera la posicion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 04/03/2010, 08:44
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 0
Respuesta: Ordenar array multidimensional en javascript.

Gracias por contestar Zerokilled, y perdona mi ignorancia con Javascript, pero no termino de entender la forma.

¿Qué es lo que debo poner dentro de la función, y como diferencio automáticamente datos[0] de datos[1]?

Ruego me disculpeis, y a ver si me podeis sacar de dudas, de nuevo, gracias.
  #6 (permalink)  
Antiguo 04/03/2010, 08:47
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años, 1 mes
Puntos: 65
Respuesta: Ordenar array multidimensional en javascript.

http://www.w3schools.com/jsref/jsref_sort.asp
__________________
HV Studio
Diseño y desarrollo web
  #7 (permalink)  
Antiguo 04/03/2010, 11:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 0
Respuesta: Ordenar array multidimensional en javascript.

Según este ejemplo, ordena el array de sólo una dimensión.

Lo que yo quiero es que ordene el array por el segundo nivel del array, y según su nombre.
  #8 (permalink)  
Antiguo 04/03/2010, 12:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ordenar array multidimensional en javascript.

cierto lo que indicas, pero realmente no importa mucho. por eso, en post anteriores, te indicaba que los argumentos (a,b) son referencia a los arrays internos. de modo que tienes que leer la posicion adecuada donde se encuentra el nombre. o sea, a[1] y b[1] hacen referencia a nombre.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 08/03/2010, 04:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 56
Antigüedad: 15 años
Puntos: 0
Respuesta: Ordenar array multidimensional en javascript.

Bueno, gracias a los dos por vuestra ayuda, al final lo hice manualmente mediante una función porque no me aclaraba mucho.

Código:
		function order_by_mail(){
			var orden = new Array();
			var ids = new Array();
			var names = new Array();
			var cont = 1;
			for(id in datos){
				orden[datos[id]['id']] = datos[id]['mail'].toLowerCase();
				ids[datos[id]['mail'].toLowerCase()] = datos[id]['id'];
				names[datos[id]['mail'].toLowerCase()] = datos[id]['nombre'];
				//mail[datos[id]['id']] = datos[id]['mail'].toLowerCase();
				cont++;
			}

			var ordenado = orden.sort();
			var cont = 1;
			for(id in datos){
				var iddenombre = ordenado[id];
				datos[id]['id'] = ids[iddenombre];
				datos[id]['mail'] = ordenado[id];
				datos[id]['nombre'] = names[iddenombre];
				//datos[id]['mail']
				cont++;
			}
		}
Gracias de todas formas, saludos!
  #10 (permalink)  
Antiguo 08/03/2010, 11:27
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Ordenar array multidimensional en javascript.

ya que lo intentastes, ahora tengo la libertad de mostrarte una posible solucion.
Código:
function(a,b){
if(a[1].toLowerCase() < b[1].toLowerCase())return -1;
if(a[1].toLowerCase() > b[1].toLowerCase())return 1;
return 0;
}
esa funcion se la pasas como argumento de la funcion sort.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: multidimensional
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:35.