Javascript 删除仅空白的数组元素

Javascript 删除仅空白的数组元素,javascript,Javascript,由于使用array.splice会就地修改数组,如何从数组中删除所有纯空白元素而不引发错误?对于PHP,我们有preg_grep,但我不知道如何在JS中正确地实现这一点 由于上述原因,以下操作将不起作用: for (var i=0, l=src.length; i<l; i++) { if (src[i].match(/^[\s\t]{2,}$/) !== null) src.splice(i, 1); } for(var i=0,l=src.length;i从数组中删除纯空

由于使用array.splice会就地修改数组,如何从数组中删除所有纯空白元素而不引发错误?对于PHP,我们有preg_grep,但我不知道如何在JS中正确地实现这一点

由于上述原因,以下操作将不起作用:

for (var i=0, l=src.length; i<l; i++) {

    if (src[i].match(/^[\s\t]{2,}$/) !== null) src.splice(i, 1);

}
for(var i=0,l=src.length;i从数组中删除纯空白元素的更好方法

说明:

Array.prototype.filter
返回一个新数组,仅包含函数返回的元素
true
(或truthy值)


/\S/
是一个与非空白字符匹配的正则表达式。
/\S/.test(str)
返回
str
是否具有非空白字符。

您从数组中删除了一个缩短数组长度的项。循环继续,跳过了一些索引(那些下移到已删除索引中的索引),并最终尝试访问新范围之外的索引

请尝试以下方法:

var src=[“1”、“2”、“3”];
var i=src.长度;
而(i-)!/\S/.test(src[i])和&src.拼接(i,1);
console.log(src);
对于新一代(即ES2015):


另一种基于过滤器的变体-可重用(功能)

a=“删除空白”

它返回{a=“remove white spaces”}中所有字符的数组,其中没有“space”字符


您可以分别测试每个方法的输出:split()和join()。

只需执行此示例即可

// this is you array 
let array = ["foo","bar","",""]

// remove blanks in array 
let array_new_value = array.join(" ").trim().split(' ');

// Print to know if really works 
console.log(array_new_value);
我希望这对你有帮助!!

const words=['spray'、'limit'、'elite'、'exuberant'、''、''、'';
const result=words.filter(word=>word.trim().length>0);

log(结果);
这里是另一种方法

var data = JSON.parse(arrayval.split(/\s/).join(''));

你真的想在适当的位置更改数组,还是生成第二个经过过滤的数组?他在
for
循环的
初始化部分中有
l=src.length
,而不是测试部分。没有在适当的位置修改数组吗?请解释。在4.5小时的睡眠中运行使我错过了一个简单的问题试图缓存数组长度,而我实际上不应该这样做。>\u<现在的问题是,哪种方法实现相同的目标最快或最省力?@tenub,答案将取决于实际中出现空白元素的频率(例如,很多、几乎从不等)。空白元素越多,
过滤器
拼接
速度越快。如果几乎没有空白元素,
拼接
速度越快。@tenub,缓存长度并不是唯一的问题。当您从数组中删除一个项目时,它会将剩余的项目下移到索引中…因此,您将跳过下移的项目在当前索引中,
i
。这不仅仅是问题所要求的。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引你pvotes
    function removeWhiteSpaceFromArray(array){
    return array.filter((item) => item != ' ');
}
a.split(' ').join('').split('');
// this is you array 
let array = ["foo","bar","",""]

// remove blanks in array 
let array_new_value = array.join(" ").trim().split(' ');

// Print to know if really works 
console.log(array_new_value);
var data = JSON.parse(arrayval.split(/\s/).join(''));
function clearSpace(arr){
    for (var key in arr) {
        if (arr[key] == "") {
            arr.splice(key, 1)
            clearSpace(arr)
        }
    }
}
var arr = ["","a","b","",""]
clearSpace(arr)

//I hope this helps you!!
//Vu Tien Luong - 3GTEL