Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/08/2007, 08:40
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: borrar un elemento de un array

Es un problema que se solventa fácilmente si utilizamos un buscador...


Para borrar elementos de un array a mi personalmente el método del operador delete no me convence, porque pasa lo siguiente:
Código PHP:
var miArr = ["perro""casa""coche""avión"];
e("Longitud del array: "+miArr.length+"; Contenido: "+miArr);
delete miArr[1];
e("Longitud del array: "+miArr.length+"; Contenido: "+miArr); 
Cita:
Iniciado por output
Longitud del array: 4; Contenido: perro,casa,coche,avión
Longitud del array: 4; Contenido: perro,,coche,avión
La longitud del array no se modifica! Esto es, hay un elemento sin valor, cuyo valor es undefined, y si hiciéramos un bucle desde 0 hasta miArr.length tendríamos ese valor undefined ahí.


Para recorrerlo he propuésto tres métodos:
Código PHP:
// En un bucle for normal:
e("miArr:");
for(var 
i=0i<miArr.lengthi++) {
    
e("miArr["+i+"] = "+miArr[i]);
}
e("-----");
// En un bucle for peor hecho:
e("miArr:");
for(var 
i=0; (elemento miArr[i]); i++) {
    
e("miArr["+i+"] = "+miArr[i]);
}
e("-----");
// En un for..in
e("miArr:")
for(var 
i in miArr) {
    
e("miArr["+i+"] = "+miArr[i]);

Cita:
Iniciado por output
miArr:
miArr[0] = perro
miArr[1] = undefined
miArr[2] = coche
miArr[3] = avión
-----
miArr:
miArr[0] = perro
-----
miArr:
miArr[0] = perro
miArr[2] = coche
miArr[3] = avión
El primero es un poco chapuza, el segundo es el desastre total y el último es el que "nos vale", siempre y cuando no utilicemos el prototype para añadirle funcionalidad:
Código PHP:
Array.prototype.alertaUnoPorUno = function() {
    for(var 
i=0i<this.lengthi++) {
        
alertthis[i] );
    }
}
// En un for..in
e("miArr:")
for(var 
i in miArr) {
    
e("miArr["+i+"] = "+miArr[i]);

Cita:
Iniciado por output
miArr:
miArr[alertaUnoPorUno] = function() { for(var i=0; i<this.length; i++) {
alert( this[i] ); }}
miArr[0] = perro
miArr[2] = coche
miArr[3] = avión
Habría que tener cuidado porque aquí también nos recorre las funciones declaradas para el objeto... es un poco problemático.




La solución que propongo es splice(). Si colocamos miArr.splice(x,1) nos borrará el elemento x del array. Lo peligroso es que modifica la longitud del array, y para utilizarlo en bucles tenemos que tener cuidado.

Cita:
Iniciado por chefnelone
pero para esto PRIMERO necesitaria saber como hago para saber que posicion tiene un elemento ?
Para saber qué posición tiene un valor ya dado tendrías que crearte una función buscar() para un array que te devuelva la posición que buscas, como tantas otras cosas, no está implementada por defecto



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.