即使条件不成立,地图函数也会返回项目

时间:2019-05-29 11:48:59

标签: javascript

这是我的代码:

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

3 个答案:

答案 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)