删除仅限空格的数组元素

时间:2013-12-18 21:33:41

标签: 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);

}

错误:

  

未捕获的TypeError:无法调用未定义的方法'match'

9 个答案:

答案 0 :(得分:21)

“从数组中删除仅空白元素”的更好方法。

var array = ['1', ' ', 'c'];

array = array.filter(function(str) {
    return /\S/.test(str);
});

说明:

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

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

答案 1 :(得分:3)

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

    function removeWhiteSpaceFromArray(array){
    return array.filter((item) => item != ' ');
}

答案 2 :(得分:2)

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

请改为尝试:

var src = ["1"," ","2","3"];
var i = src.length;    
while(i--) !/\S/.test(src[i]) && src.splice(i, 1);
console.log(src);

答案 3 :(得分:2)

const words = ['spray', 'limit', 'elite', 'exuberant', ' ', ''];

const result = words.filter(word => word.trim().length > 0);

console.log(result);

答案 4 :(得分:1)

a =“删除空格”

a.split(' ').join('').split('');

它返回{a =“删除空格”}中没有'空格'字符的所有字符的数组。

您可以为每种方法单独测试输出:split()和join()。

答案 5 :(得分:0)

对于新一代(即ES2015):

['1', ' ', 'c'].filter(item => item.trim() !== '')

More on trim()

答案 6 :(得分:0)

只需简单地执行此示例

// 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);

希望对您有帮助!

答案 7 :(得分:0)

这是另一种方法。

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

答案 8 :(得分:0)

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