这是我的代码:
//input = aaaaaaa, ddd, ,
asdsad,
newUser =
users
.split(',')
.map(item => {
item = item.trim();
if(item.length > 0) {
return item;
}
}).join();
//output = aaaaaaa,ddd,,asdsad,
所以我的问题是,为什么从地图函数返回项目的长度为0?我缺少明显的东西吗?
//编辑:
是的,现在可以删除空字符串了,但是空格呢?我的结果仍然看起来像这样:
asdasdasd , aa
我想要拥有:
asdasdasd,aa
答案 0 :(得分:1)
根据.map()的文档
map()方法创建一个新数组,其结果是在调用数组的每个元素上调用提供的函数。
因此,使用map可以对每个元素执行一些操作,而不能忽略任何元素。
如果要基于某些条件忽略某些元素,请使用.filter()。
对于您的情况,您可以首先使用map()
修剪所有元素,然后使用filter()
删除长度不是>0
的元素。
var input = "aaaaaaa, ddd, ,asdsad ";
var output = input.split(',').map(item => {
item = item.trim();
return item;
}).filter(item => {
return item.length > 0;
}).join();
console.log(output);
答案 1 :(得分:0)
length
返回的数组map()
始终等于原始数组的长度。如果要根据条件删除数组元素,请使用filter()
。
在特定情况下,您可以先从字符串中删除空格,然后再用单个逗号删除两个或多个相邻逗号。
let input = 'aaaaaaa, ddd, , asdsad,'
let res = input.replace(/\s+/g,'').replace(/,{2,}/,',');
console.log(res)
答案 2 :(得分:0)
您可以使用String replace和regex删除所有空白
let input = 'aaaaaaa, ddd, , asdsad,';
let newData = input.replace(/ /g, '');;
console.log(newData)
或者,您可以使用reduce函数。在reduce回调内部,检查字符串的长度,如果条件满足,则用累加器将其压入。最后使用join
来使用,
定界符
let users = " aaaaaaa, ddd, , asdsad"
let newUser = users.split(',')
.reduce(function(acc, curr) {
if (curr.trim().length > 0) {
acc .push(curr.trim());
}
return acc;
},[]).join(',')
console.log(newUser)