如何从数组中删除空值("")?

31

我有一个二维数组,用jQuery从HTML表格生成,但是有些值是空的,所以显示为""

我该如何去掉这些空值?

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

我已经尝试了以下代码:

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

对于一些空值,它是有效的,但由于某种原因,并非所有空值都被删除了。

输出:https://imgur.com/e7BAdQK


请提供一些演示代码。请使用jsfiddle或其他工具。因为空白可能来自许多不同的事物。 - Deckerz
3
在for循环的下方添加columns = columns.filter(a => a!="")。该语句的作用是过滤掉columns数组中为空字符串的元素,并将非空元素重新赋值给columns变量。 - alt255
11个回答

102

你可以像这样使用筛选器:

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

示例:

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

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

因为空字符串会被评估为布尔值false, 所以对所有的假值都适用,例如:0, false, null, undefined, ''等。

演示

如果您想保留一些值,如数字0(零),则可以使用item !== undefined。这将仅过滤未定义的值。请记住修剪您的字符串或使用正则表达式检查以确保没有空格的空字符串。


也在Google Apps Script中工作过。 - DavChana

17
尝试使用 Boolean 函数进行过滤:
columns.filter(Boolean)
这将过滤掉所有假值。

4

这是因为当你使用 columns[0].splice(i, 1); 时,你正在改变你正在迭代的同一个数组,因此你可能需要使用数组过滤器,例如

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

使用for循环的替代方案


你不应该使用!=,这是一个不好的习惯。 - bugkiller

3
创建列数组后,像这样过滤空值。
columns = columns.filter((v) => v != '')

2

如果某些值可能为0,则通过检查""来进行过滤(因为0也会被评估为false,所以布尔检查将对0失败):

最初的回答:

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

2

只需使用过滤器函数

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

它将删除空值。

原始回答

1
假设有一个数组如下:['ABC123','',0,'0',' ',null,undefined,empty] 您应该考虑“空值”''' 'nullundefinedempty,但不包括0
my_array = my_array.filter(item => item && (item.toString().replace(/\s+/,'') || item === 0));

结果是['ABC123', 0, '0']


1

在ES6中,假设你有以下数组:

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

如果你想从数组中删除''(即空值),你可以这样做:

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

使用地图(常规JS)或者说使用Map(普通JS)
const myArr = [1, 2, '', '4'];

noEmptyStringInThisArray = [];

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

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

1
对于es6来说,这是一种相当笨拙的方法来删除空字符串。你也可以使用以下方式: arr.filter(val => val); - vizon

1
我很惊讶没有人给出正确的答案。
在这里所有基于布尔值表达式,你都需要筛选出要保留的结果。例如 - "0"等。
array.filter(item => item !== '')

0

你可以轻松地从数组中删除 emptynullundefined 值。

let my_array = ['One', undefined, 'Two', '', null, 'Four', '', '', 'Five'];

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

console.log(my_array);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接