Hola foreros,
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>