2010-09-22 13 views
5

que tiene una matriz¿Existe alguna manera rápida de eliminar un valor específico de una matriz en Javascript?

var array = ["google","chrome","os","windows","os"]; 

Quiero borrar el valor "chrome" de la matriz sin la matriz convertirse en una cadena. ¿Hay alguna forma de hacer esto?

+17

Me resulta difícil creer que alguien llamado Chromedude quiera _delete_ Chrome de su matriz. – ChessWhiz

+0

@ChessWhiz jaja, ni siquiera pensé en eso, pero está en mi matriz y no necesita ser eliminado :) – chromedude

Respuesta

5

No hay manera más rápida que encontrarlo y luego se retira. Encontrándolo, puede hacerlo con un bucle o (en implementaciones que lo admitan) indexOf. Quitándolo, puede hacerlo con splice.

ejemplo vivo: http://jsbin.com/anuta3/2

var array, index; 
array = ["google","chrome","os","windows","os"]; 
if (array.indexOf) { 
    index = array.indexOf("chrome"); 
} 
else { 
    for (index = array.length - 1; index >= 0; --index) { 
    if (array[index] === "chrome") { 
     break; 
    } 
    } 
} 
if (index >= 0) { 
    array.splice(index, 1); 
} 
+0

¿Eso funcionaría en IE? Me parece recordar haber visto en alguna parte que no admite/no admite 'indexOf'? –

+0

Como mencionó TJ, no todos los navegadores tienen indexOf implementado. Es posible que necesites implementar el tuyo. – DashK

+0

@David: no todas las implementaciones lo tienen, de ahí la parte "con un bucle" de la respuesta. :-) Normalmente solo agrego 'indexOf' a' Array.prototype' si aún no está allí. –

2

Utilice el método splice de la clase Array.

array.splice(1, 1); 
3

Esto lo envuelve en una función conveniente:

function remove_element(array, item) { 
    for (var i = 0; i < array.length; ++i) { 
    if (array[i] === item) { 
     array.splice(i, 1); 
     return; 
    } 
    } 
} 

var array = ["google", "chrome", "os", "windows", "os"]; 
remove_element(array, "chrome"); 

o (para los navegadores que soportan indexOf):

function remove_element(array, item) { 
    var index = array.indexOf(item); 
    if (-1 !== index) { 
    array.splice(index, 1); 
    } 
} 

Editar: Fijo con === y !==.

+1

Realmente debería estar usando '===' y '! ==' en lugar de '==' y '! =', Respectivamente. –

+0

@Los ganas te comerán: no es necesario '! ==' en '(-1! == índice)' ... se sabe que el índice es un número, porque eso es todo indexOf volverá, y -1 es conocido por ser un número. Entonces no hay necesidad de una comparación estricta. Por lo general, prefiero algo como '(índice> -1)'; YMMV. –

2

El método splice() agrega y/o elimina elementos a/de una matriz y devuelve los elementos eliminados.

array.splice(indexOfElement,noOfItemsToBeRemoved); 

en su caso

array.splice(1, 1); 
1

Usted no ha mencionado si su corresponde conservar los índices de los restantes elementos de la matriz o no. Sobre la base de que se puede tratar con tener miembros indefinidos de una matriz, que puede hacer:

var array = ["google","chrome","os","windows","os"]; 
delete array[1]; 

array [1] será entonces indefinido.

+0

gracias, pero no quiero un valor indefinido. – chromedude

2
You may want to remove all of the items that match your string, 
or maybe remove items that pass or fail some test expression. 
Array.prototype.filter, or a substitute, is quick and versatile: 


var array= ["google","chrome","os","windows","os"], 
b= array.filter(function(itm){ 
    return 'os'!= itm 
}); 
alert(b) 
Cuestiones relacionadas