¿Cómo desarmo un elemento en una matriz en javascript?


138

¿Cómo elimino la clave 'barra' de una matriz para que la 'barra' no aparezca en

for(key in foo){alert(key);}

Respuestas:


243

No use eliminar ya que no eliminará un elemento de una matriz, solo lo configurará como indefinido, lo que no se reflejará correctamente en la longitud de la matriz.

Si conoce la clave, debe usar empalme, es decir

myArray.splice(key, 1);

Para alguien en la posición de Steven puedes probar algo como esto:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

o

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1 Buen punto, también me gusta de esta manera: ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster - ¿Te gustaría explicarlo? No sé lo que eso significa y tengo ganas de aprender. Como siempre, una edición es 1,000,000 de veces mejor que un comentario fuera de lugar; debes saber eso con la cantidad de repeticiones que tienes.
partir del

21
Usar en for (var key in myArray)lugar de for (key in myArray): de lo contrario, keyes una variable global y si llama a una función dentro de ese ciclo que tiene el mismo problema, obtendrá resultados inesperados.
ThiefMaster

2
Tenga en cuenta que el segundo ejemplo no funciona si la matriz tiene varios elementos en una fila que coinciden con 'barra'. El índice de la matriz cambiará y perderá el empalme de la mitad de los elementos. En su lugar, use un bucle for que disminuya el índice cuando se encuentre una coincidencia.
Dave Lancea


52
delete foo[key];

:RE


44
técnicamente eso no responde la pregunta. él está buscando eliminar la clave 'barra'. y su variable clave no implica eso. : P
Kon

44
clave = 'barra'; eval ("eliminar foo". + tecla); se esconde ; D
olliej

3
No NO utilizar eval. La eliminación de una clave / índice de un objeto / matriz se puede lograr mediante métodos mucho más simples que no se usan eval.
Dinei

44
En realidad, si elimina de la matriz indexada eliminando foo [clave], almacenará el valor en foo [clave] = undefined y foo.length seguirá siendo el mismo, lo cual es incorrecto. Así que use SPLICE en su lugar
Павел Иванов

use delete foo [key] es incorrecto; debe usar foo.splice (clave, 1);
vnguyen

38

Una nota importante: las matrices de JavaScript no son matrices asociativas como las que podría estar acostumbrado desde PHP. Si su "clave de matriz" es una cadena, ya no está operando en el contenido de una matriz. Su matriz es un objeto y está utilizando la notación de paréntesis para acceder al miembro llamado <nombre clave>. Así:

var myArray = [];
myArray ["bar"] = verdadero;
myArray ["foo"] = verdadero;
alerta (myArray.length); // devuelve 0.

Como no ha agregado elementos a la matriz, solo ha modificado los miembros de barra y foo de myArray.


37

Si conoce el nombre de la clave, simplemente haga lo siguiente:

delete array['key_name']

2
¡Esto no es una matriz! Es un objeto (sí, se llaman matrices asociativas en JS, pero no, en realidad no lo son, y este método es perjudicial si realmente trabaja con una matriz JS).
wintercounter

3

Así es como lo haría

 myArray.splice( myArray.indexOf('bar') , 1) 

1
El método Array.prototype.indexOf () busca un valor dentro de una matriz, no una clave. Entonces esto no funcionará.
Nadav

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.