¿Cómo eliminar un elemento de un array en JavaScript?
Una matriz, también llamada arreglo (o array en inglés), es una colección ordenada de datos que se utiliza para almacenar varios valores bajo una variable. ¿Cómo se elimina un elemento específico de un arreglo en JavaScript?
Existen varios métodos del objeto Array
que se pueden utilizar para borrar elementos de un arreglo. Algunos de ellos son
Podemos usar algunas de estas funciones en combinación con indexOf
y findIndex
.
Ten en cuenta que existen dos tipos de soluciones para eliminar elementos de un array:
- mutando, o modificando, el array original 😬
- devolviendo un nuevo array, sin modificar el array original ✅
En la mayoría de los casos, debes evitar modificar el array original. Debido a la naturaleza de “asignar por referencia” de los arrays en JavaScript, modificarlos puede producir problemas inesperados y difíciles de depurar.
Si lo que buscas es eliminar duplicados de un array, consulta nuestro artículo ¿Cómo eliminar elementos duplicados de un array en Javascript?
Tabla de Contenido
¿Cómo eliminar un elemento de una array por índice?
Puedes utilizar una de dos funciones de JavaScript para eliminar un elemento de un arreglo según el índice del elemento.
- El método
splice
modificará el arreglo. - El método
toSpliced
no modificará el arreglo original, sino que devolverá uno nuevo.
Usando splice
El método de splice
cambia el contenido de un arreglo quitando elementos. También se puede utilizar para reemplazar elementos existentes y/o agregar nuevos elementos. Para este post, nos centraremos en eliminar elementos del arreglo.
splice
muta el arreglo original y retorna un arreglo que contiene los elementos eliminados.
El primer parámetro es start
, que en nuestro ejemplo representa el índice de base cero en el que comenzar a eliminar elementos del array.
El segundo parámetro es deleteCount
, que indica la cantidad de elementos que deseas eliminar desde start
.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// Usa el indice para remover el elemento
const removed = names.splice(2, 1);
console.log(removed); // 👉 ['Kip']
// Arreglo modificado 😬
console.log(names); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
También puedes eliminar más de un elemento del array.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// Usa el indice para remover el elemento
const removed = names.splice(1, 3); // 👉 ['Pedro', 'Kip', 'Deb']
// Arreglo modificado 😬
console.log(names); // 👉 ['Napoleon', 'Summer']
Usando toSpliced
El método toSpliced
se puede utilizar para retornar un nuevo array con los elementos especificados eliminados.
El primer parámetro es start
, que es el índice de base cero donde deseas comenzar a omitir elementos en el nuevo array.
El segundo parámetro es deleteCount
, que indica la cantidad de elementos que desea omitir desde start
.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// Usa el indice para remover el elemento
const newArray = names.toSpliced(2, 1); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
// Nuevo array
console.log(newArray); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
// Array original permanece igual ✅
console.log(names); // 👉 ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer']
¿Cómo eliminar un elemento de un array por valor?
Si ya sabes cuál es el valor que deseas eliminar del arreglo pero no conoces su índice, usa indexOf
o findIndex
para encontrar el índice del elemento, luego usa splice
o toSpliced
para eliminar el elemento.
Eliminar un elemento de un array usando indexOf y splice
- Proporcione a
indexOf
el valor que estás buscando y te devolverá el primer índice donde se encuentra el valor; de lo contrario, devolverá-1
. - Una vez que conozcas el índice del elemento del arreglo que deseas eliminar, utiliza
splice
.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// 1. Encuentra el indice
const index = names.indexOf('Kip'); // 👉 2
// 2. Usa el indice para especificar el elemento a remover
if (index !== -1) {
names.splice(index, 1); // 👉 ['Kip']
}
// Arreglo mutado 😬
console.log(names); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
Eliminar un elemento de un array usando findIndex y splice
El método findIndex
devuelve el índice del primer elemento que satisface la función de prueba, de lo contrario, devolverá -1
.
- Proporciona a
findIndex
una función callback para encontrar el valor que estás buscando. - Una vez que conozcas el índice del elemento del arreglo que deseas eliminar, utiliza
splice
.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// 1. Encuentra el indice
const index = names.findIndex(n => n === 'Kip'); // 👉 2
// 2. Usa el indice para especificar el elemento a remover
if (index !== -1) {
names.splice(index, 1); // 👉 ['Kip']
}
// Arreglo mutado 😬
console.log(names); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
Eliminar un elemento de un array usando filter
filter
no modifica el array, sino que devuelve una copia superficial que contiene solo los elementos que pasan la prueba. ✅
Ten en cuenta que si ningún elemento pasa la prueba, filter
devuelve una matriz vacía. 👀
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
const newArray = names.filter(n => n !== 'Kip');
// Nuevo arreglo ✅
console.log(newArray); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
Eliminar un elemento de un array usando toSpliced
toSpliced
no muta el array original, sino que devuelve un nuevo array con los elementos especificados eliminados.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
// Encuentra el indice
const index = names.indexOf('Kip'); // 👉 2
// Revisa que el elemento fue encontrado
if (index !== -1) {
// Usa el indice para eliminar el elemento
const newArray = names.toSpliced(index, 1); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
// Nuevo arreglo
console.log(newArray); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
}
// Array original permanece sin cambios ✅
console.log(names); // 👉 ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer']
¿Cómo eliminar un objeto de un array de objetos?
Con el método de filter
, puedes eliminar un objeto de una matriz según el valor de la propiedad.
Eliminar un objeto de un array con el método de filter
filter
devolverá una copia superficial de la matriz que contiene solo los elementos que satisfacen la función de prueba.
const customers = [{
id: 100,
name: 'Napoleon',
}, {
id: 101,
name: 'Pedro',
}, {
id: 102,
name: 'Deb',
}];
const filteredByName = customers.filter(
// especifica la propiedad y el valor
customer => customer.name !== 'Pedro'
);
console.log(filteredByName); // 👉 [ { "id": 100, "name": "Napoleon" }, { "id": 102, "name": "Deb" } ];
Eliminar un objeto de un array con el método toSpliced
Puedes crear un nuevo arreglo con el objeto especificado eliminado utilizando los métodos findIndex
y toSpliced
.
Tal como su nombre lo indica, findIndex
devuelve el índice del primer elemento del arreglo que pasa la prueba. Luego, toSpliced
puede usar el índice para determinar qué elemento no debe estar presente en el nuevo arreglo.
const customers = [{
id: 100,
name: 'Napoleon',
}, {
id: 101,
name: 'Pedro',
}, {
id: 102,
name: 'Deb',
}];
const index = customers.findIndex(customer => customer.name === 'Pedro');
if (index !== -1) {
const newArray = customers.toSpliced(index, 1);
console.log(newArray); // 👉 [ { "id": 100, "name": "Napoleon" }, { "id": 102, "name": "Deb" } ];
}
Eliminar un objeto de un arreglo con el método splice
Si prefieres modificar el arreglo original, puedes utilizar los métodos findIndex
y splice
.
const customers = [{
id: 100,
name: 'Napoleon',
}, {
id: 101,
name: 'Pedro',
}, {
id: 102,
name: 'Deb',
}];
const index = customers.findIndex(customer => customer.name === 'Pedro');
if (index !== -1) {
customers.splice(index, 1);
}
// Arreglo modificado 😬
console.log(customers); // 👉 [ { "id": 100, "name": "Napoleon" }, { "id": 102, "name": "Deb" } ];
Crea una función para eliminar un elemento de un array
¿Cuál es el beneficio de programar tu propia función? Reutilización de código, es decir, usar código previamente desarrollado con el fin de evitar la duplicación de código.
Puedes utilizar cualquiera de las soluciones ya presentadas para programar tu propia función de utilidad.
Siempre es mejor evitar mutaciones y prevenir problemas inesperados. Te recomendaría que utilices una de las soluciones que no modifica el array original.
Selecciona una de las soluciones, envuélvela en una declaración de función y realiza algunos ajustes.
function removeElementByValue(arr, value) {
const index = arr.indexOf(value);
if (index !== -1) {
return arr.toSpliced(index, 1);
}
return arr;
}
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
const newArray = removeElementByValue(names, 'Kip');
console.log(newArray); // 👉 ['Napoleon', 'Pedro', 'Deb', 'Summer']
¿Cómo eliminar el primer elemento de un array?
Utiliza el método shift
para eliminar el primer elemento de una matriz. Además de eliminar el primer elemento, shift
devuelve el valor eliminado.
const numbers = [1, 2, 3, 4, 5];
const removedValue = numbers.shift();
console.log(`The array of numbers: ${numbers}`); // 👉 2, 3, 4, 5
console.log(`The removed value : ${removedValue}`); // 👉 1
¿Cómo eliminar el último elemento de un array?
Utiliza el método pop
para eliminar el último elemento de una matriz. Además de eliminar el último elemento, pop
devuelve el valor eliminado.
const numbers = [1, 2, 3, 4, 5];
const removedValue = numbers.pop();
console.log(`The array of numbers: ${numbers}`); // 👉 1, 2, 3, 4
console.log(`The removed value : ${removedValue}`); // 👉 5
¿Cómo eliminar todos los elementos de un array?
Para vaciar un array, utiliza el método splice
. Como índice inicial usa 0
y como deleteCount
usa la propiedad length
del array.
En el siguiente ejemplo, el argumento start
es 0
y deleteCount
es 5.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
names.splice(0, names.length); // 👉 ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer']
// Matriz modificada
console.log(names); // 👉 []
No utilices el operador delete
para eliminar elementos de un array
Puedes sentirse tentado a utilizar el operador delete
para eliminar elementos de un arreglo de JavaScript. Parece muy sencillo de usar.
Te recomiendo encarecidamente que no lo utilices. ¿Por qué? Si bien elimina el elemento del arreglo, no actualiza la propiedad de length
.
const names = ['Napoleon', 'Pedro', 'Kip', 'Deb', 'Summer'];
delete names[2];
// Array mutado 😬
console.log(names); // 👉 ['Napoleon', 'Pedro', undefined, 'Deb', 'Summer']
console.log(names.length); // 👉 5