移除每个数组元素开头的空格

7

我需要将一个大字符串按照某种方式使用split()函数拆分成数组,但现在每个元素前面都有一个空格。

例如:

var array = [" hello"," goodbye"," no"];

我该如何摆脱这个问题?

根据要求拆分代码:

var depots = v.innerHTML.split(',');
6个回答

24

你可以使用.map.trim

var array = [" hello"," goodbye"," no"];
array = array.map(function (el) {
  return el.trim();
});
console.log(array);

如果您使用ES2015,您可以使用箭头函数来更简洁地实现它。
array = array.map(el => el.trim());

11
不要使用 Array#map() 来更改数组中的每个元素,而是在使用分隔符拆分字符串时从字符串本身中删除空格。
使用 String#trim()String#split() 和正则表达式。
str.trim().split(/\s*,\s*/)

正则表达式 \s*,\s* 可以匹配被任意数量(包括零)空格包围的逗号。

演示实例:

var regex = /\s*,\s*/;

document.getElementById('textbox').addEventListener('keyup', function() {
  document.getElementById('result').innerHTML = JSON.stringify(this.value.trim().split(regex));
});
<input type="text" id="textbox" />
<pre id="result"></pre>

trim()函数会移除字符串开头和结尾的空格,而使用正则表达式,\s*进行split操作会将字符串按照逗号后面的任意数量空格进行分割。

同样的效果也可以通过在String#match中使用带有全局标记的否定正则表达式来实现。

str.match(/[^,\s]+/g)

为什么不应该使用 map()

在这种情况下使用 map 需要额外的开销。首先,通过 , 分割字符串,然后迭代数组的每个元素并使用 trim 删除前导和尾随空格,然后更新数组。这比使用上面的正则表达式的 split 慢一些。


这种情况怎么办:"test,test,test, ff ff, ffdf d , df".trim().split(/,\s*/) - Oleksandr T.
@Alexander 完美运行!OP想要什么?--> v.innerHTML.split(','); 然后“我怎样才能去掉空格?”上面给出了输出["test", "test", "test", "ff ff", "ffdf d ", "df"],这就是OP想要的。 - Tushar
不太完美的代码 "ffdf d " - 如您所见,在 d 后面有一个空格。无论如何,我已经在评论中告诉作者看看您的解决方案。我认为它很好,但需要知道作者想要什么。 - Oleksandr T.
@Alexander 不确定你为什么说那个输入“不完美”。我已经添加了实时演示,请在演示中检查上面的字符串。 - Tushar
@Tushar,您已将“RegExp”从“/,\s*/”更改为“/\s,\s/”! - Oleksandr T.
@Alexander 是的,创建演示时发现了一个小错误。 - Tushar

1

var array = [" hello"," goodbye"," no"].toString().replace(/\s*\,\s*/g, ",").trim().split(",");

console.log(array)


0

Tushar回答中的问题

@Tushar的回答中还有一件事要补充。 回答很好,解释得很清楚。只是漏掉了一件事,我认为这不是问题的要求。

如果用户输入双逗号而不是单逗号,则会将空字符串添加/返回到数组中。我对代码进行了一点修改。

.filter(elem => elem.length !== 0)

解释

filter() 迭代数组中的每个元素,并通过字符串的 .length 属性检查它是否为空。如果元素长度不等于零,它将被添加/作为元素返回到数组中。最后将返回一个全新的过滤后的数组。

var regex = /\s*,\s*/;

document.getElementById('textbox').addEventListener('keyup', function() {
  document.getElementById('result').innerHTML = JSON.stringify(this.value.trim().split(regex).filter(elem => elem.length !== 0));
});
<input type="text" id="textbox" />
<pre id="result"></pre>


-1
循环遍历每个数组元素并将其修剪。就像下面这样。
for (int i = 0; i < array.length; i++)
    trimmedArray[i] = array[i].trim();

-5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接