Foros del Web » Programando para Internet » Javascript »

Un arreglo muy especial...

Estas en el tema de Un arreglo muy especial... en el foro de Javascript en Foros del Web. Hola estimadisimos ando dandome vueltas con una funcionsita medio complicada para mi, haber si me pueden hechar una manito... explico: tengo una lista de elementos ...
  #1 (permalink)  
Antiguo 30/12/2008, 13:04
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Un arreglo muy especial...

Hola estimadisimos ando dandome vueltas con una funcionsita medio complicada para mi, haber si me pueden hechar una manito...

explico: tengo una lista de elementos separados con ";" de esta forma

asiento = "3;6;14;16;12";

la cual divido y convierto a un arreglo de la siguiente manera:

asiento_rc = asiento.split(";");

asi obtengo el arreglo
asiento_rc[0]=3
asiento_rc[1]=6
asiento_rc[2]=14
asiento_rc[3]=16
..
etc.

todo ok hasta este punto, luego leo un valor si este valor ya estaba en la lista, lo que deseo es eliminar dicho valor, y posteriormente reconstruir la lista con elemento ya eliminado.

ejemplo leo el 14, lo elimino y
new_asiento = "3;6;16;12";


aca adjunto el codigo haber si me pueden ayudar.


Código:
function cambio(v_div){
	vimg = document.getElementById(v_div).style.backgroundImage;
	if (vimg == 'url(img/Poltrona.jpg)') { 
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona3.jpg)';
		if (asiento_select.length == 0){
			 asiento_select = v_div;
	  } else {
			 asiento_select = asiento_select + ';' + v_div;
			 document.getElementById('asiento').value = asiento_select;
		 }
  } else {
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona.jpg)';
		asiento_rc = asiento_select.split(";");
		for(i=0;i<=asiento_rc.length;i++){
			if(asiento_rc[i]==v_div){
			//alert(asiento_rc[i]);
				delete asiento_rc[i];
			}
		}
		//document.getElementById('asiento').value = asiento_new;
	}
}
en algun lado me pierdo.... pero no se donde, help me
  #2 (permalink)  
Antiguo 30/12/2008, 15:02
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: Un arreglo muy especial...

nadie, alguna ayudita...????
  #3 (permalink)  
Antiguo 30/12/2008, 15:29
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Un arreglo muy especial...

A ver, una pregunta: ¿La lista cómo la manejas o quieres manejar? Quiero decir, manejas la cadena separada por ; o manejas el array?
  #4 (permalink)  
Antiguo 30/12/2008, 16:40
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 16 años, 9 meses
Puntos: 11
Respuesta: Un arreglo muy especial...

hola, ps con delete no lo borras totalmente, porque sigue haciendo precensia necesitas otra función:
js:
Código javascript:
Ver original
  1. Array.prototype.killIndex = function(n) {
  2.     var tempArray = [];
  3.     for (var i = 0; i < this.length; i++) {
  4.         if (i == n) continue;
  5.         tempArray.push(this[i]);
  6.     }
  7.     return tempArray;
  8. };

y remplazas esta línea

Código javascript:
Ver original
  1. delete asiento_rc[i];
  2. // por esta
  3. asiento_rc = asiento_rc.killIndex(i);

ese es el unico error que veo, no se si haya mas

saludoss
:]
__________________
Aerolíneas Alicia :D
  #5 (permalink)  
Antiguo 31/12/2008, 07:05
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: Un arreglo muy especial...

ok, no se si fui claro en el afan de simplificar las cosas, parece que no, pero ahora explico de manera global, abarcando todo el contexto de mi problema.

todo esto se situa en el contexto de dibujar los asientos de un bus., cada ves que selecciono un asiento cambio la imagen a "Poltrona3.jpg" del asiento, y en una caja de texto voy guardando el numero del asiento. si selecciono los asientos 1,2,3,4,5,6

creo una lista similar a "1;2;3;4;5;6" separadas por el caracter ";", si el vendedor se equivoca o sencillamente el cliente no quiere el asiento 4 solo hace click en el asiento, este recupera la imagen con la que viene por defecto que es "Poltrona.jpg" y la lista se modifica a "1;2;3;5;6".

tengo una tabla creada dinamicamente con php, la cual en su interior tiene div's, creados dinamicamente o en tiempo de ejecucion, estos div tiene una imagen dentro que se llama "Poltrona.jpg", a su ves estos div tiene asignados dinamicamente el evento onclick, que realiza la siguiente funcion

Código:
function cambio1(v_div){
vimg = document.getElementById(v_div).style.backgroundImage;//capturo imagen
asiento_select = document.getElementById('asiento').value;//asigno el valor del asiento
	if (vimg == 'url(img/Poltrona.jpg)') { 
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona3.jpg)';//cambio imagen
		if (asiento_select.length == 0){//si es primer click y la lista esta vacia
			 asiento_select = v_div;//asigno a una variable el valor del asiento
		}
		else {//si la lista ya tiene un valor
			 asiento_select = asiento_select + ';' + v_div;//contruyo la lista 1;2;3... etc.
			 document.getElementById('asiento').value = asiento_select;//asigno a la caja de texto la lista creada
		}
	}
	else{//aca comienzo a perderme
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona.jpg)';//si quiero eliminar el asiento, cambio la imagena ala por defecto
		if (asiento_select.length <= 2){//si es el primer valor vuelvo la lista a vacio
			 document.getElementById('asiento').value="";
		}
		else{
			asiento_rc = asiento_select.split(";");//sino convierto la lista a un array para poder eliminar el valor	
			for(i=0;i<asiento_rc.length;i++){//recorro el array
				if(asiento_rc[i] == v_div){//pregunto si es el valor 
					asiento_rc = asiento_rc.killIndex(i);//supuestamente lo elimino
				}
				else{
					asiento_new = asiento_new + ";" + asiento_rc[i];//y a ca supuestamente reconstruyo la lista
				}
			}
			document.getElementById('asiento').value = asiento_new;//aca asigno el valor d ela nueva lista a la caja de texto
		}
	}
}
esto debe tener varios errores pero por eso le pido ayuda, ojala alla sido lo mas claro posible, gracias por sus aportes...
  #6 (permalink)  
Antiguo 31/12/2008, 08:08
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Un arreglo muy especial...

Preguntaba lo de cómo manejabas la lista porque si la manejas en forma de cadena "2;4;3;5;9;" es muy fácil eliminar uno de los elementos.

Código javascript:
Ver original
  1. var milista = "2;3;5;7;1;4;";
  2. // eliminamos el 5:
  3. milista = milista.replace("5;","");
  4. // añadimos el 9:
  5. milista += "9;";

De hecho, es tan simple que no necesitas ni buscarlo. Si haces milista = milista.replace("5;",""); y el 5 no estaba, no pasa nada, no da error. Y no necesitas ir haciendo split() cada vez.

Eso sí, mejor que pongas siempre ; detrás de cada número, así lo manejas mejor. Te dejo estas funciones:

Código javascript:
Ver original
  1. function anadirasiento(lista, asiento) {
  2.     lista += asiento + ";";
  3.     return lista;
  4. }
  5. function quitarasiento(lista,asiento) {
  6.     lista = lista.replace(asiento+";","");
  7.     return lista;
  8. }
  9.  
  10. // Se usarían así:
  11. var milista = "";
  12. milista = anadirasiento(milista,"3");
  13. milista = anadirasiento(milista,"7");
  14. milista = anadirasiento(milista,"6");
  15. milista = anadirasiento(milista,"2");
  16. milista = quitarasiento(milista,"7");

Última edición por venkman; 31/12/2008 a las 08:14
  #7 (permalink)  
Antiguo 31/12/2008, 10:41
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Respuesta: Un arreglo muy especial...

no lo he provado estimado, lo voy a hacer, pero de todas formas ya lo solucione de otra forma siguiendo lo que hacia, aca la solucion....


Código:
function cambio1(v_div){
vimg = document.getElementById(v_div).style.backgroundImage;//capturo imagen

	if (vimg == 'url(img/Poltrona.jpg)') { 
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona3.jpg)';//cambio imagen
		if (asiento_select.length == 0){//si es primer click y la lista esta vacia
			 asiento_select = v_div;//asigno a una variable el valor del asiento
		}
		else {//si la lista ya tiene un valor
			 asiento_select = asiento_select + ',' + v_div;//contruyo la lista 1;2;3... etc.
			 document.getElementById('asiento').value = asiento_select;//asigno a la caja de texto la lista creada
		}
	}
	else{
		document.getElementById(v_div).style.backgroundImage = 'url(img/Poltrona.jpg)';//si quiero eliminar el asiento, cambio la imagena ala por defecto
		asiento_rc = asiento_select.split(",");//convierto la lista a un array para poder eliminar el valor
			for(i=0;i<asiento_rc.length;i++){//recorro el array
					if(asiento_rc[i] == v_div){//pregunto si es el valor 
						asiento_rc.splice(i, 1);//elimino valor
					}
			}
			document.getElementById('asiento').value = asiento_rc;//aca asigno el valor del array a la caja de texto
	}
}
para usted
y por supuesto para mi tb
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:11.