JS: Arrays

Teoría: Eliminar elementos de un array

En JavaScript, no existe una forma directa y sencilla de eliminar un elemento de un array. ☹️ Algunas soluciones pueden parecer intuitivas, como la instrucción delete, pero tienen efectos inesperados.

Veamos un ejemplo:

const numbers = [1, 10];
delete numbers[0];
console.log(numbers);
// => [ <1 empty item>, 10 ]

Aquí, el valor en la posición 0 del array desaparece, pero el espacio sigue existiendo. Esto puede causar problemas cuando queremos recorrer el array o realizar operaciones con él.

Una alternativa común es utilizar el método splice, pero tampoco es la opción más intuitiva cuando necesitamos eliminar elementos bajo ciertas condiciones.

La mejor opción: crear un nuevo array

Cuando se trata de eliminar elementos de un array, una buena práctica es no modificar el array original, sino construir uno nuevo con los elementos que queremos conservar.
Un caso muy común es el de eliminar los valores `null`, lo que se conoce como **compactación**.

Veamos cómo podemos implementar una función compact() que haga esto de manera efectiva:

const compact = (coll) => {
  const result = []; // Crear un nuevo array vacío

  for (const item of coll) {
    if (item !== null) {
      result.push(item); // Agregar solo los elementos que no son null
    }
  }

  return result; // Retornar el nuevo array
};

console.log(compact([0, 1, false, null, true, 'wow', null]));
// => [ 0, 1, false, true, 'wow' ]
console.log(compact([]));
// => []

¿Qué está pasando aquí?

  • Creamos un nuevo array vacío llamado result.
  • Recorremos el array original (coll) y verificamos cada elemento.
  • Si el elemento no es null, lo agregamos al array result.
  • Finalmente, retornamos result, que ya no contiene los valores null.

Ventajas de este enfoque

Este método tiene varias ventajas:

No modifica el array original: Siempre podemos consultarlo en caso de errores o para depuración.

Evita problemas inesperados con índices vacíos o modificaciones peligrosas del array.

Es más claro y fácil de leer, ya que seguimos un patrón lógico paso a paso.

Este tipo de operación se conoce como filtrado, porque estamos eliminando elementos que no cumplen una determinada condición.

Resumen

  • delete no elimina un elemento completamente, solo su valor.
  • Modificar un array directamente puede llevar a errores y situaciones confusas.
  • Una mejor alternativa es construir un nuevo array sin los elementos no deseados.
  • La operación de eliminar elementos bajo cierta condición se llama filtrado.
  • Separar los datos en un nuevo array facilita la depuración y mejora la claridad del código.