Foros del Web » Programando para Internet » Javascript »

borrar un elemento de un array

Estas en el tema de borrar un elemento de un array en el foro de Javascript en Foros del Web. Hola a todos Solo eso . como se borra un elemento de un array? supongamos que quiero borrar el elemento "carmen" de este array: var ...
  #1 (permalink)  
Antiguo 24/08/2007, 13:52
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
borrar un elemento de un array

Hola a todos

Solo eso . como se borra un elemento de un array?

supongamos que quiero borrar el elemento "carmen" de este array:

var miarray = new Array()

miarray[0]= "carmen";
miarray[1]= "jose";

gracias
  #2 (permalink)  
Antiguo 24/08/2007, 15:42
 
Fecha de Ingreso: enero-2005
Mensajes: 105
Antigüedad: 19 años, 3 meses
Puntos: 2
Re: borrar un elemento de un array

Aqui van algunos ejemplos de borrado de elementos de un arreglo


Borrar el ultimo elemento pop()

myFish = ["angel", "clown", "mandarin", "surgeon"];
popped = myFish.pop();

Borra el primer elemento shift()

myFish = ["angel", "clown", "mandarin", "surgeon"];
shifted = myFish.shift();

Borra una posicion determinada del arreglo
arreglo=new Array("redwood","bay","cedar","oak","maple");
delete arreglo[3];
  #3 (permalink)  
Antiguo 24/08/2007, 16:56
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: borrar un elemento de un array

gracias rlobos
supongo que con el ultimo ejemplo me arreglaria:

delete arreglo[3];

pero para esto PRIMERO necesitaria saber como hago para saber que posicion tiene un elemento ?
  #4 (permalink)  
Antiguo 25/08/2007, 08:40
Avatar de 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.
  #5 (permalink)  
Antiguo 25/08/2007, 10:20
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: borrar un elemento de un array

gracias

No se si he entendido todo pero voy a ver como me la arreglo.
De todas formas aun no se como detectar la posicion de un elemento en un array...
Vaya lio no? para hacer algo tan sencillo

(esto me recuerda como me gusta php )

Última edición por chefnelone; 25/08/2007 a las 10:28
  #6 (permalink)  
Antiguo 25/08/2007, 10:38
 
Fecha de Ingreso: diciembre-2005
Ubicación: Barcelona
Mensajes: 1.428
Antigüedad: 18 años, 4 meses
Puntos: 15
Re: borrar un elemento de un array

no habra algun libreria tipo prototype o jquery para hacer esto mas facil??
  #7 (permalink)  
Antiguo 25/08/2007, 15:21
Avatar de 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

No trabajo con librerías prefrabricadas, pero en proyectos grandes suelo reutilizar las mismas funciones:

Código PHP:
/* 
   WALK: Sirve para recorrer todas las posiciones del array, y aplicarles una función.
    -funcionaplicada: Se ejecuta la funcion pasándole por argumento la posición del array, y su índice
        si funcionaplicada devuelve true el bucle se para
   WALK siempre devuelve la posición en que ha finalizado el bucle a no ser que termine después de recorrer el Array (caso false).
*/
Array.prototype.walk = function( funcionaplicada ) {
    for(var 
i=0parar=falsei<this.length && !parari++ )
        
parar funcionaplicadathis[i], i);
    return (
this.length==i)? false : (i-1);
}
/*
    BUSCAR: Devuelve el índice donde se encuenta q en Array, y si no existe devuelve -1;
*/
Array.prototype.buscar = function(q) {
    var 
dev this.walk(function(elem) {
        if( 
elem==)
            return 
true;
    } );
    if( 
this[dev]==) return dev;
    else return -
1;
}
/* 
    ELIMINAR: Renombramiento, más legible, más cómodo. 
*/
Array.prototype.eliminar = function(x) {
    
this.splice(x,1);
}
/*
    ELIMINAR CON VALOR: Busca un elemento por su valor y lo elimina.
    true si ha eliminado algo
    false si no ha modificado el array
*/
Array.prototype.eliminarPorValor = function(valor) {
    var 
elIndice this.buscar(valor);
    
this.eliminar(elIndice);

Así podemos hacer las cosas más legibles:
Código PHP:
var miArray = ["perro""casa""coche""avión"];
e("Longitud del array: "+miArray.length+"; Contenido: "+miArray); 
e("Elimino 'coche'");
miArray.eliminarPorValor("coche");
e("Longitud del array: "+miArray.length+"; Contenido: "+miArray); 
Cita:
Iniciado por output
Longitud del array: 4; Contenido: perro,casa,coche,avión
Elimino 'coche'
Longitud del array: 3; Contenido: perro,casa,avión
Y aquí no ha pasado nada


Es complicado, pero es que js no es que tenga tanto "repertorio" como php, tiene 4 cosillas, y mejorarlo es complejo porque depende del navegador del usuario, en última instancia casi de m$, y no suelen apuntar muy bien.




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.
  #8 (permalink)  
Antiguo 21/09/2008, 08:24
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: borrar un elemento de un array

Para buscar la posición del elemento y luego borrarlo se puede usar la función indexOf:

Código:
var miArray=new Array('Gato', 'Perro', 'Loro');
var posBorrar=miArray.indexOf('Perro');
delete miArray(posBorrar);
El problema sería que haya más de un elemento 'Perro' en el array, en tal caso solo borraría el primero.

Además si se imprime miArray[1] se obtendrá la etiqueta "undefined".
Si lo que se quiere hacer es eliminar esa posición y que 'Loro' pase a la posición "1" entonces hay que usar splice, el código quedaría así:

Código:
var miArray=new Array('Gato', 'Perro', 'Loro');
var posBorrar=miArray.indexOf('Perro');
miArray.splice(posBorrar, 1);
Ahora al imprimir el array se obtendrá 'Gato' en la posición 0 y 'Loro' en la posición 1.

Saludos.

Gustavo
  #9 (permalink)  
Antiguo 21/09/2008, 10:14
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Respuesta: borrar un elemento de un array

El mensaje original es de hace más de 1 año. Por favor, no reviváis temas tan antiguos.

Saludos,
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:59.