Tengo un problemilla con esta sencilla rutina, y desde hace dos días que no puedo encontrar el fallo.
Se trata de una serie de vectores (p1 a p3) que conforman una matriz (perhermanos). Los elementos [2] de los vectores (elementos [i][2] de matriz perhermanos) son fechas en formato DDMMAAAA. Necesito ordenar dichos vectores dentro de perhermanos por fecha creciente (esto es: de más antigua a más reciente). Por razones que no vienen al caso, no puedo usar el método .sort del objeto Array. Para ello he escrito el siguiente código:
1. Trabajo con fechas redefinidas al formato AAAAMMDDXX, donde XX son los últimos dos dígitos de los elementos [0] de los vectores p.
1. Un for interior (índice i) detecta qué fecha es la más antigua dentro de matriz perhermanos.
2. A ese vector lo transfiero al final de la matriz perhermanosbis mediante el método .push.
3. Para no volver a detectar ese mismo vector de perhermanos en ciclo for externo posterior (índice j), le cambio el valor al elemento [2] del vector transferido a perhermanosbis (mediante la instrucción perhermanos[mayor][2]="xxxxxxxx";).
4. Supuestamente, con este código, al finalizar ambos bucles for, tendría que obtener la matriz perhermanosbis ordenada por fechas, y la matriz original perhermanos con todos sus elementos [i][2] iguales a "xxxxxxxx".
Pues no: obtengo los elementos [2] de los vectores de perhermanosbis iguales a "xxxxxxxx" también. Sé que el cambio de la fecha "DDMMAAAA" a "xxxxxxxx" en perhermanosbis ocurre ejecutando la instrucción perhermanos[mayor][2]="xxxxxxxx"; , pero esta instrucción no debería cambias perhermanosbis sino sólo perhermanos (como lo hace).
Sinceramente no sé dónde está el fallo, sé que será una tontería, pero no lo puedo hallar. A ver si algún forero puede verlo. Gracias anticipadas.
Código HTML:
<?xml version="1.0" encoding="UTF-8"? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd> <html xmlns=http://w3.org/1999/xhtml xml:lang="en"> <head> <script type="text/javascript"> function arbol(){ var p1=new Array("10001","2","10121952","3"); var p2=new Array("10002","5","15121955","6"); var p3=new Array("10003","8","23081947","9"); var perhermanos=new Array(p1,p2,p3); var s=3; var perhermanosbis=new Array(); var mayor=0; for(j=1;j<=s;j++){ fechamasantigua="9999999999"; for(i=0;i<=perhermanos.length-1;i++){ fechaactual=perhermanos[i][2].substr(4,4)+perhermanos[i][2].substr(2,2)+perhermanos[i][2].substr(0,2)+perhermanos[i][0].substr(3,2); if(fechaactual<fechamasantigua && fechaactual.substr(0,8)!="xxxxxxxx"){ fechamasantigua=fechaactual; mayor=i; }else{ continue; } } // Fin for. perhermanosbis.push(perhermanos[mayor]); // alert(mayor); alert(perhermanosbis); perhermanos[mayor][2]="xxxxxxxx"; alert(perhermanosbis); } // Fin for. } // Fin function arbol. </script> </head> <body style="background-color:#FFFFFF" onLoad="javascript:arbol();"> Esto es una prueba... </body> </html>