Eliminar elementos vacíos de un array en Javascript
¿Cómo se eliminan los elementos vacíos de un array en JavaScript?
¿Existe una forma sencilla, o tengo que hacer un bucle y eliminarlos manualmente?
987
3
EDIT: Esta pregunta fue respondida hace casi nueve años, cuando no había muchos métodos incorporados útiles en el
Array.prototype
.Ahora, ciertamente, te recomendaría usar el método
filter
.Ten en cuenta que este método te devolverá un nuevo array con los elementos que pasen los criterios de la función callback que le proporciones.
Por ejemplo, si quieres eliminar los valores
null
oundefined
:Dependerá de lo que consideres "vacío", por ejemplo, si se trata de cadenas, la función anterior no eliminaría los elementos que sean una cadena vacía.
Un patrón típico que veo a menudo es eliminar elementos que son falsos, que incluyen una cadena vacía
""
,0
,NaN
,null
,undefined
, yfalse
.Puedes pasar al método
filter
, la función constructoraBoolean
, o devolver el mismo elemento en la función de criterios de filtrado, por ejemplo:O
En ambos casos, esto funciona porque el método
filter
en el primer caso, llama al constructorBoolean
como una función, convirtiendo el valor, y en el segundo caso, el métodofilter
internamente convierte el valor de retorno de la llamada de retorno implícitamente enBoolean
.Si estás trabajando con arrays dispersos, y estás tratando de deshacerte de los "agujeros", puedes utilizar el método
filter
pasando una llamada de retorno que devuelva true, por ejemplo:Respuesta antigua: ¡No hagas esto!
Yo uso este método, extendiendo el prototipo nativo de Array:
O simplemente puedes empujar los elementos existentes en otro array:
Puede que te resulte más fácil hacer un bucle sobre tu matriz y construir una nueva matriz con los elementos que quieres conservar de la matriz que intentar hacer un bucle y empalmar como se ha sugerido, ya que modificar la longitud de la matriz mientras se hace el bucle puede introducir problemas.
Podrías hacer algo así:
En realidad aquí hay una solución más genérica:
Usted consigue la idea - usted podría entonces tener otros tipos de funciones de filtro. Probablemente más de lo que necesitas, pero me sentía generoso... ;)
Prueba esto. Pásale tu array y lo devolverá con los elementos vacíos eliminados. *Actualizado para corregir el error señalado por Jason