2010-01-05 14 views
299
var arr = [1,2,3,5,6]; 

Quiero quitar el primero elemento de la matriz por lo que se convierte en:¿Cómo eliminar elementos de una matriz en JavaScript?

var arr = [2,3,5,6]; 

Para extender esta pregunta, ¿y si quiero retirar el segundo elemento de la matriz por lo que se convierte en:

var arr = [1,3,5,6]; 
+1

'rebanada (START, end) 'not _'how_many_to_remove'_ – seanjacob

+2

@Ped arr.unshift() doesnt REMOVE, pero" Agrega uno o más elementos al comienzo de una matriz " –

+0

@seanjacob es' splice' no 'slice' Supongo. –

Respuesta

304

Para una solución más flexible, use la función splice(). Se le permite eliminar cualquier elemento de una matriz basada en el Índice de Valor:

var indexToRemove = 0; 
var numberToRemove = 1; 

arr.splice(indexToRemove, numberToRemove); 
+12

Y la siguiente pregunta: 'arr.splice (1,1)' para el segundo elemento. – slebetman

+1

Prefiero 'splice()' sobre 'shift()' porque es más flexible. Es posible que desee hacer algo diferente en el futuro, y no siempre quiero eliminar solo un elemento, o incluso el primer elemento. –

+11

Si vienes desde Google: Gabriel prefiere esta respuesta, pero debes tener en cuenta que también hay shift(), ver la respuesta de Joseph. – SHernandez

637

shift() es ideal para su situación. shift() elimina el primer elemento de una matriz y devuelve ese elemento. Este método cambia la longitud de la matriz.

array = [1, 2, 3, 4, 5]; 

array.shift(); // 1 

array // [2, 3, 4, 5] 
+0

Esto funciona, pero solo eliminará el primer elemento de la matriz. –

+51

@Gabriel: ¿no fue exactamente esa la pregunta? Prefiero 'shift()' a 'splice (..., ...)' ya que es mucho más explícito, directo. –

+12

Responde a la pregunta formulada en el título, que es la respuesta que buscará la mayoría de las personas que busquen esta pregunta en una búsqueda. –

12

Escribí un pequeño artículo sobre cómo insertar y eliminar elementos en posiciones arbitrarias en matrices de Javascript.

Aquí está el pequeño fragmento para eliminar un elemento de cualquier posición. Esto amplía la clase Array en Javascript y agrega el método remove (index).

// Remove element at the given index 
Array.prototype.remove = function(index) { 
    this.splice(index, 1); 
} 

Así que para eliminar el primer elemento en su ejemplo, arr.remove llamada():

var arr = [1,2,3,5,6]; 
arr.remove(0); 

Para retirar el segundo elemento,

arr.remove(1); 

He aquí una pequeña article con inserto y eliminar métodos para la clase Array.

Básicamente esto no es diferente de las otras respuestas que usan empalme, pero el nombre splice no es intuitivo, y si tiene esa llamada en toda la aplicación, simplemente hace que el código sea más difícil de leer.

+2

la url del artículo no funciona – MikeMurko

30
arr.slice(begin[,end]) 

es no destructivo, de empalme y cambio modificarán su matriz original

+1

Sí para no mutar. Esto debería ser más visible. – user

51

El método Array.prototype.shift elimina el primer elemento de una matriz, y lo devuelve. Modifica la matriz original.

var a = [1,2,3] 
// [1,2,3] 
a.shift() 
// 1 
a 
//[2,3] 
+4

Una gran mejora en la respuesta de Joseph Silvashy, sin inconsistencias entre la descripción y el código. – mklement0

-1

Array.splice() tiene la interesante propiedad de que no se puede utilizar para quitar el primer elemento. Por lo tanto, tenemos que recurrir a

function removeAnElement(array, index) { 
    index--; 

    if (index === -1) { 
     return array.shift(); 
    } else { 
     return array.splice(index, 1); 
    } 
} 
+1

Array.splice (0,1) elimina el primer elemento. De acuerdo con cualquier otra respuesta aquí, y de acuerdo con https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice. Además, ¿por qué alguien pasaría -1 para eliminar el primer elemento? ¿No pasarían 0? – stone

+0

@skypecakes No puedo hablar sobre la validez del empalme en el 0 ° índice, pero aquí el índice se reduce antes de esa comprobación, por lo que habría sido 0 cuando se haya ingresado. –

1

Si desea eliminar uno o varios elementos de una matriz depende de su contenido y/o su posición.

Puede usar la función de matriz js filter.

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter.

Retire primer elemento:

// Not very useful but it works 
function removeFirst(element, index) { 
    return index > 0; 
} 
var arr = [1,2,3,5,6].filter(removeFirst); // [2,3,4,5,6] 

Retire segundo elemento:

function removeSecond(element, index) { 
    return index != 1; 
} 
var arr = [1,2,3,5,6].filter(removeSecond); // [1,3,4,5,6] 

Retire el elemento extraño:

function removeOdd(element, index) { 
    return !(element % 2); 
} 
var arr = [1,2,3,5,6].filter(removeOdd); [2,4,6] 
Cuestiones relacionadas