如何从JavaScript中的数组中删除空元素?
有没有简单的方法,还是我需要遍历它并手动将其删除?
编辑: 大约9年前,当时没有很多有用的内置方法时,就回答了这个问题Array.prototype。
Array.prototype
现在,当然,我建议您使用该filter方法。
filter
请记住,此方法将为您返回 一个新数组, 其中的元素可以通过您提供给它的回调函数的条件。
例如,如果要删除null或undefined值:
null
undefined
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 ,包括一个空字符串"",0,NaN,null,undefined,和false。
""
0
NaN
false
您可以传递给filter方法,Boolean构造函数或在过滤条件函数中返回相同的元素,例如:
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,,,,]);