如何从JavaScript中的数组中删除空元素?
有没有简单的方法,还是我需要遍历它并手动将其删除?
编辑: 大约9年前,当时没有很多有用的内置方法时,就回答了这个问题Array.prototype
。
现在,当然,我建议您使用该filter
方法。
请记住,此方法将为您返回 一个新数组, 其中的元素可以通过您提供给它的回调函数的条件。
例如,如果要删除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
。
您可以传递给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的格子后,希望得到的是: