我有一个非常简单的字符串,它可以包含一个可能包含空格的列表:
string = "one, two,three ";我想首先用,拆分字符串,创建一个包含三个字符串的数组,然后使用.trim()删除所有空格
array = string.split(',').trim();它返回"one","two","three"
但是,有时它会失败并返回错误.trim() is not a function
我读到.trim()返回一个新的字符串,而不是当前字符串的修剪版本。所以我使用了一个for循环来做上面的事情:
array = string.split(',');
for (var i = 0; i < array.length; i++) {
var item = array[i].trim();
array.push(item);
}它返回"one","two","three"
我的问题是,有没有人能解释一下为什么我只是偶尔会遇到这个错误?如果数组从未从我的示例中更改过,那么是否有人可以为我的修复提供一个更干净的解决方案。
发布于 2015-10-07 19:57:22
split()不适用于数组,但适用于字符串。将字符串写入数组时,必须通过array[0]获取该字符串,因为该字符串是第一个元素。
如果将字符串拆分为数组,则可以调用map函数并修剪新创建的数组中的每个值。如下所示:
array = ["one, two,three "];
array = array[0].split(',')
array = array.map(function(a){return a.trim()})或者简而言之:
array = ["one, two,three "][0].split(',').map(function(a){return a.trim()})发布于 2015-11-22 19:48:39
在与ES6兼容的运行时(即: node 4+)中,您可以使用箭头函数,该函数为您提供了较少冗长的代码来实现您的目标:
> "one, two, three ".split(',').map(s => s.trim());
[ 'one', 'two', 'three' ]发布于 2016-08-18 18:27:45
我在尝试使用"for (splitTokens中的var i)“迭代String.split的输出时也遇到了同样的问题。注意:这只发生在我的浏览器(在我的例子中是Chrome),即在节点进程中使用相同的代码时不会发生这种情况。
它把我弄糊涂了,直到我连接了一个调试器,然后我发现了问题所在。String.split返回一个数组对象实例(splitTokens),该实例上有函数("each“等)。"for (splitTokens中的var i)“循环也会迭代函数,所以splitTokensi会返回例如数组实例的each函数,如果我尝试调用"trim()”(因为函数对象没有名为trim()的函数),就会导致事情爆炸。
https://stackoverflow.com/questions/32991269
复制相似问题