从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