当前位置: 首页 > 面试题库 >

从Javascript数组中删除空元素

孙博艺
2023-03-14
问题内容

如何从JavaScript中的数组中删除空元素?

有没有简单的方法,还是我需要遍历它并手动将其删除?


问题答案:

编辑: 大约9年前,当时没有很多有用的内置方法时,就回答了这个问题Array.prototype

现在,当然,我建议您使用该filter方法。

请记住,此方法将为您返回 一个新数组, 其中的元素可以通过您提供给它的回调函数的条件。

例如,如果要删除nullundefined值:

var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];



var filtered = array.filter(function (el) {

  return el != null;

});



console.log(filtered);

例如,这将取决于您认为什么是“空”,如果您正在处理字符串,则上述函数不会删除为空字符串的元素。

我看到经常使用的一种典型模式是除去那些元件 falsy
,包括一个空字符串""0NaNnullundefined,和false

您可以传递给filter方法,Boolean构造函数或在过滤条件函数中返回相同的元素,例如:

var filtered = array.filter(Boolean);

要么

var filtered = array.filter(function(el) { return el; });

在这两种方式中,这都是可行的,因为filter在第一种情况下,该方法将Boolean构造函数作为一个函数调用,转换该值,在第二种情况下,该filter方法在内部将回调的返回值隐式转换为Boolean

如果您正在使用稀疏数组,并且试图摆脱“漏洞”,则可以使用filter传递返回true的回调的方法,例如:

var sparseArray = [0, , , 1, , , , , 2, , , , 3],

    cleanArray = sparseArray.filter(function () { return true });



console.log(cleanArray); // [ 0, 1, 2, 3 ]

旧答案: 不要这样做!

我使用此方法,扩展了本机Array原型:

Array.prototype.clean = function(deleteValue) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == deleteValue) {         
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};

test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);

或者,您可以简单地将现有元素推入其他数组:

// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
  var newArray = new Array();
  for (var i = 0; i < actual.length; i++) {
    if (actual[i]) {
      newArray.push(actual[i]);
    }
  }
  return newArray;
}

cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);


 类似资料:
  • 这正是我的意思,但在JavaScript:PHP中,可以从数组的两侧移除空项 我在寻找最干净的方法。我想知道是否有比手动循环数组更好的方法。 这里有一个例子: null null

  • 问题内容: 根据用户提交的内容,数组中的某些元素是空字符串。我需要删除那些元素。我有这个: 但这是行不通的。仍然有空元素。我也尝试过使用该功能,但是结果是一样的。 问题答案: 在处理字符串数组时,您可以简单地使用,它可以方便地为您处理所有这一切: 请记住, 如果未提供回调 ,则将删除所有等于(请参见转换为boolean)数组的条目。因此,如果您需要保留元素,即确切的string ,则需要一个自定义

  • 问题内容: var arr = [1,2,3,5,6]; 删除第一个元素 我想删除数组的第一个元素,使其变为: 删除第二个元素 扩展这个问题,如果我想删除数组的第二个元素以使其变为: 问题答案: 要获得更灵活的解决方案,请使用该功能。它允许您根据索引值删除数组中的任何项目:

  • 问题内容: 我有一个字符数组,一次最多可以容纳50000个字符。该数组的内容通过套接字连接来。但是,不能保证此字符缓冲区不会有任何空元素。然后,我需要将此字符数组转换为字符串(例如,新的String(buffer);)。我的问题是,每当我从套接字收到的缓冲区长度不超过50000时,如何从此char数组或String中删除剩余的元素或空元素?如果没有,您建议的最有效方法是什么? / 这是当前的实现

  • 问题内容: 有什么快速(好看的)方法可以从Java中的数组中删除元素? 问题答案: 你可以使用的。

  • 如上图片, 每个方块都有一个宽,高,X轴,Y轴; 有可能宽占多份, 高占多份; 但宽度最大就占3份, 高度不限; 每次删除一个格子, 下面的格子自动往左往上补齐; 给到数据假如是: 删除id为5的格子后,希望得到的是: