从array-Javascript中删除空字符串或空白字符串

从array-Javascript中删除空字符串或空白字符串,javascript,arrays,regex,string,filter,Javascript,Arrays,Regex,String,Filter,我找到了删除空字符串的漂亮方法-arr=arr.filter(布尔) 但它似乎对空白字符串不起作用 var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry']; arr = arr.filter(Boolean); // ["Apple", " ", "Mango", "Banana", " ", "Strawberry"] // should be ["Apple", "Mango", "Banana", "Str

我找到了删除空字符串的漂亮方法-
arr=arr.filter(布尔)

但它似乎对空白字符串不起作用

var arr = ['Apple', '  ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
arr = arr.filter(Boolean);
// ["Apple", "  ", "Mango", "Banana", " ", "Strawberry"]

// should be ["Apple", "Mango", "Banana", "Strawberry"]

是否有一种很好的方法来扩展此方法以删除空白,或者我应该首先通过迭代数组来修剪空白?

您可以利用空字符串作为falsy值

你可以用

使用ES6箭头功能:

arr = arr.filter(e => String(e).trim());
var arr=[“苹果”、“芒果”、“香蕉”、“草莓”];
var nonEmpty=arr.filter(e=>String(e.trim());
document.getElementById('result').innerHTML=JSON.stringify(非空,0,4)
基于:

\s

匹配单个空白字符,包括空格、制表符、换行符、换行符和其他Unicode空格。相当于
[\f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff]

接着,说
\s
应该匹配,比如
\u0009
(Tab,
),
\u000B
(垂直选项卡,
),
\u000C
(表单提要,
),
\u0020
(空格,
),
\u00A0
(无中断空格,
),
(字节顺序标记,
),和其他类别“Zs”(
),以及
\u000A
(换行,
)、
\u000D
(回车,
)、
\u2028
(行分隔符,
)和
\u2029
(段落分隔符,
),只有当
trim()
本机不可用时,才能使用以下代码删除空元素或空白元素:

var arr=[“苹果”、“芒果”、“香蕉”、“草莓”];
arr=arr.filter(s=>s.replace(/\s+//g',)。长度!==0);
//还是ES5
//arr=arr.filter(函数(el){返回el.replace(/\s+//g',).length!==0;});

控制台日志(arr)
filter
可以工作,但您需要正确的谓词函数,而
Boolean
不是(为此):

\S
表示“非空白字符”,因此
/\S/.test(…)
检查字符串是否至少包含一个非空白字符。)

或者(可能有点过火,更难阅读)


使用ES2015(又称ES6)箭头功能,更简洁:

// Example 4
arr = arr.filter(entry => entry.trim() != '');


实例——ES5和早期版本:

var arr=[“苹果”、“芒果”、“香蕉”、“草莓”];
log(“示例1:+JSON.stringify(arr.filter(函数(条目){return entry.trim()!=”;}));
log(“示例2:+JSON.stringify(arr.filter(函数(条目){return/\S/.test(条目);}));
var rex=/\S/;

log(“示例3:+JSON.stringify(arr.filter(rex.test.bind(rex)))可以使用
Array.protype.join()
String.prototype.split()
和参数
RegExp
/\s |,/
后跟
.filter(布尔值)

var arr=[“苹果”、“芒果”、“香蕉”、“草莓”];
arr=arr.join().split(/\s |,/).filter(布尔);
console.log(arr)
您可以试试这个。我发现这个过程很简单,对我来说很有效

让arrayEle=[“abc”、“”、“”、“”、“def”、“xyz”、“”];
arrayEle=arrayEle.filter((元素)=>{
返回/\S/.test(元素);
});
控制台日志(arrayEle)
常量水果=[“苹果”,“未定义”,“芒果”,“香蕉”,“草莓]; filter(水果=>水果和水果.trim()) 产量:[“苹果”、“芒果”、“香蕉”、“草莓”]


以ES6编写的一行解决方案,可快速使用:

const filterary=a=>a.filter(x=>typeof x!=='string'| |!!x.trim())
这样做的一些优点是它忽略了非字符串的任何内容

没有ES6:

函数过滤器阵列(a){
返回a.filter(函数(x){
返回类型x!='string'| |!!x.trim()
})
}
例如:

const filterary=a=>a.filter(x=>typeof x!=='string'| |!!x.trim())

log(filterArray([1,2,4','','')
我使用filter并检查元素长度是否不等于零。 这对我很有效,这个解决方案很简短:

const arr=[“苹果”、“芒果”、“香蕉”、“草莓”]
常量arr2=arr.filter(项=>item.length!==0)

console.log(arr2)
我会使用
字符串(e).trim()
,以防万一。@agm1984因为OP只想删除空字符串和只包含空格的字符串,所以我使用了
trim
。如果你只想保留真实值,你可以使用
.filter(e=>e)
。谢谢,我在进一步评估后删除了我的答案。答案不错,节省了我的时间。您永远无法确定数组中的所有内容都是
字符串
。说
稍微干净一点/\S/.test(entry)
@torazaburo:实际上,我所有的例子都是反向的@丹尼尔:典型的早上精神衰竭。固定的。:-)@T.J.Crowder:如果数组的第一个/第二个元素只包含一个空格字符,那么您的第一个/第二个示例为什么不删除该数组的第一个元素?@user3001499:不,为什么?我只使用
\s
,但建议使用此regexp。如果我们真的需要支持所有Unicode空白,我们需要向字符类添加更多字符。但是
\s
不包括
\xA0
(这不能简单地写成
\n
)?MDN是凡人写的,不应该被视为神圣的书写。很明显,
\s
包括
\n
,这与
\x0a
相同。所以MDN页面上给出的regexp是错误的,或者至少是冗余的。我不知道“硬空间”是什么意思。根据MDN regexp页面,“\n匹配一个换行符(U+000A)。”是的,我在答案中添加了所有相关细节。我希望它现在是完整的,并且对那些寻求帮助的人有所帮助
// Example 2 - Using a regular expression instead of String#trim
arr = arr.filter(function(entry) { return /\S/.test(entry); });
// Example 3
var rex = /\S/;
arr = arr.filter(rex.test.bind(rex));
// Example 4
arr = arr.filter(entry => entry.trim() != '');
// Example 5
arr = arr.filter(entry => /\S/.test(entry));
Filter condition: fruit && fruit.trim()

prefix - will remove all the falsy value
suffix - will trim and then remove all the falsy values

function clearSpace(arr){
    for (var key in arr) {
        if (arr[key] == "") {
            arr.splice(key, 1)
            clearSpace(arr)
        }
    }
}
var arr = ["","a","b","",""]
clearSpace(arr)
console.log(arr)

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