小编典典

在Javascript中从数组中删除空元素

all

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

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


阅读 342

收藏
2022-02-25

共1个答案

小编典典

编辑: 这个问题几乎在九年前就得到了回答,当时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 元素,其中包括空字符串""0NaNnullundefinedfalse

您可以传递给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,,,,]);
2022-02-25