¿Cómo eliminar valores de matriz vacíos (“”) de una matriz?

3 minutos de lectura

Avatar de usuario de House97_
casa97_

Tengo una matriz bidimensional, generada a partir de una tabla html con jQuery, pero algunos valores están vacíos, por lo que "" se visualiza.

¿Cómo puedo eliminar los valores vacíos?

  <table>    
    <tr>
      <th>1A</th>
      <th>1B</th>
      <th>1C</th>
    </tr>
    <tr>
      <td>2A</td>
      <td>2B</td>
      <td>2C</td>
    </tr>
    <tr>
      <td></td>
      <td>3B</td>
      <td>3C</td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td>4C</td>
    </tr>
  </table>
<script>
    var columns = $('tr').first().children().map(function(i) {
        return [
            $('tr').map(function(){
                return $(this).children().eq(i).text()
            }).get()
        ]
    }).get();
<script>

Ya probé el siguiente código:

for( var i = 0; i < columns[0].length; i++){ 
   if ( columns[0][i] === "") {
    columns[0].splice(i, 1); 
   }
}

Funcionó para algunos valores vacíos, pero no todos fueron eliminados por alguna razón.

Producción: https://imgur.com/e7BAdQK

  • Algún código de demostración estaría bien. Usa jsfiddle o algo por favor. Como los espacios en blanco pueden provenir de muchas cosas diferentes.

    – Deckerz

    15 de abril de 2019 a las 8:20

  • justo después del bucle for agregar columns = columns.filter(a => a!="")

    – alt255

    15 de abril de 2019 a las 8:20


  • Posible duplicado de Eliminar elementos vacíos de una matriz en Javascript

    – jeprubio

    15 de abril de 2019 a las 8:24

  • ¿Posible duplicado de Eliminar cadenas vacías de la matriz mientras se mantiene un registro sin bucle?

    – adiga

    15 de abril de 2019 a las 8:57

Avatar de usuario de Dominik
dominik

Podrías usar el filtro como:

arr = arr.filter(item => item);

Ejemplo:

let arr = ['One', 'Two', '', 'Four', '', ''];
arr = arr.filter(item => item);
console.log(arr);

// Result
// ['One', 'Two', 'Four']

Porque una cadena vacía se evalúa como booleana false. Funciona con todos los valores falsos como 0, false, null, undefined, ''etc.

MANIFESTACIÓN

Si desea mantener algunos valores como el número 0 (cero) podrías usar item !== undefined. Esto filtra solo valores no definidos. Tenga en cuenta recortar su cadena o verificar con expresiones regulares para garantizar cadenas vacías sin espacios en blanco.

  • Trabajó en Google Apps Script también.

    – Dav Chana

    8 de mayo de 2021 a las 17:02

Prueba a filtrar con el Boolean función:

columns.filter(Boolean)

Esto filtrará todos los valores falsos

es porque cuando tu columns[0].splice(i, 1); está cambiando la misma matriz sobre la que está iterando, por lo que es posible que desee usar un filtro de matriz como

columns[0] = columns[0].filter((val) => val != "");

en lugar del bucle for

después de crear la matriz de columnas,

filtrar los valores vacíos así

columns = columns.filter((v) => v != '')

Solo usa la función de filtro:-

columns = columns.filter(col => col);

Eliminará los valores vacíos.

Avatar de usuario de Jack Bashford
Jack Bashford

Si algunos valores pueden ser 0filtrar comprobando contra "" (porque 0 evalúa a false también, por lo que las comprobaciones booleanas fallarán para 0):

columns[0].filter(col => col != "");

En ES6, digamos que tiene la siguiente matriz:

arr = [1, 2, 3, '', false, '4'];

y quieres quitar '' (Que es un valor vacío) de la matriz. Tu puedes hacer:

const filter = (...args) => args.filter(el => el !== '');
console.log(filter(...arr));
[1, 2, 3, false, "4"] // Output

O usando el mapa (JS regular)

const myArr = [1, 2, '', '4'];

noEmptyStringInThisArray = [];

myArr.map((elem) => {
    if (elem !== '') {
    noEmptyStringInThisArray.push(elem);
    }
})

console.log(noEmptyStringInThisArray);
// [1, 2, "4"]

  • Para es6, esa es una forma bastante torpe de eliminar cadenas vacías. Tú también puedes: arr.filter(val => val);

    – vizón

    13 abr a las 15:05


¿Ha sido útil esta solución?