How to remove empty array values ("") from an array?

48,702

Solution 1

You could use the filter like:

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

Example:

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

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

Because an empty string evaluates to boolean false. It works with all falsy values like 0, false, null, undefined, '', etc.

DEMO

If you want to keep some values like number 0 (zero) you could use item !== undefined. This filters only undefined values. Keep in mind to trim your string or check with regex to ensure empty strings without whitespaces.

Solution 2

Try filtering with the Boolean function:

columns.filter(Boolean)

This will filter out all falsy values

Solution 3

It's because when you columns[0].splice(i, 1); you are changing the same array you are iterating over so you might want to use an array filter like

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

instead of the for loop

Solution 4

after creating the columns array,

filter the empty values like that

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

Solution 5

If some values might be 0, filter by checking against "" (because 0 evaluates to false as well, so Boolean checks will fail for 0):

columns[0].filter(col => col != "");
Share:
48,702
House97_
Author by

House97_

Updated on July 12, 2022

Comments

  • House97_
    House97_ almost 2 years

    I have an two dimensional array, generated from a html table with jQuery, but some values are empty so "" is displayed.

    How can I remove the empty values?

      <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>
    

    I already tried following code:

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

    It worked for some empty values, but not all of them got removed for some reason.

    Output: https://imgur.com/e7BAdQK