由于使用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'
答案 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)
答案 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