Guía y comprobaciones
Borrar una posición conocida
splice modifica el array. El primer argumento indica dónde empieza y el segundo cuántos elementos elimina; su valor de retorno contiene lo que se ha retirado.
const tareas = ['leer', 'probar', 'guardar'];
const retiradas = tareas.splice(1, 1);
console.log(JSON.stringify(tareas)); // ["leer","guardar"]
console.log(JSON.stringify(retiradas)); // ["probar"]
Si buscas primero el valor con indexOf, comprueba que la posición sea distinta de -1. Pasar -1 a splice retira desde el final y puede borrar el elemento equivocado cuando el valor buscado no existe.
Obtener una nueva lista
filter conserva los valores cuyo predicado resulta verdadero. Es apropiado para eliminar todos los elementos que cumplen una regla sin cambiar el array inicial.
const ids = [4, 7, 4, 9];
const restantes = ids.filter(id => id !== 4);
console.log(JSON.stringify(restantes)); // [7,9]
console.log(JSON.stringify(ids)); // [4,7,4,9]
Una copia nueva no implica que los objetos de su interior también sean nuevos. Si filtras objetos y después modificas uno de ellos, ese objeto puede seguir compartido con la lista anterior.
No confundas delete con compactar
delete lista[1] elimina una propiedad, pero deja un hueco y no reduce necesariamente la longitud. Para una lista de elementos consecutivos, suele ser una sorpresa al recorrerla o enviarla como JSON. Elige splice para una edición en posición o filter para una selección completa.
Si quieres eliminar sólo la primera aparición de un valor repetido, buscar su posición y retirar uno expresa esa intención. Si necesitas eliminar por identificador, compara el campo de identidad con el tipo correcto: el número 7 y el texto '7' no son iguales en una comparación estricta. Añade casos con una lista vacía, un valor ausente y varios duplicados antes de conectar la operación a la interfaz.
Preguntas frecuentes
¿filter cambia el array original?
No crea una nueva versión de cada objeto, pero sí devuelve un array distinto con las referencias seleccionadas.
¿Qué pasa si indexOf devuelve -1?
El valor no se encontró. No llames a splice con esa posición si querías eliminar una coincidencia concreta.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.