2015-10-07 58 views
-3

我有一个可以包含都不可能包含空白列表的非常简单的字符串:.trim()不是一个函数

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"

我的问题是,任何人都可以解释为什么我收到错误只是偶尔?如果阵列从我的示例中永远不会改变,并且任何人都可以为我的修复提供更清晰的解

+7

你应该每次都得到'TypeError:array.split不是一个函数',所以它永远不会得到你所说的错误 –

+0

''这会返回“one”,“two”,“three” - 不,它不会...它也抱怨array.split不是一个函数 - 我建议如果你需要代码的帮助,当你简化它,确保它显示相同的错误真正的代码有 –

+0

split()方法通过将字符串分隔成子字符串,将字符串对象分割成字符串数组,从[doc](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) –

回答

2

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()}) 
1

在ES6兼容的运行(即:节点4+),可以使用使用箭头功能,让你不那么冗长的代码来实现你的目标:

> "one, two, three ".split(',').map(s => s.trim()); 
[ 'one', 'two', 'three' ] 
0

我看到这个试图重复String.split的使用输出“为(VAR我在splitTokens)”同样的问题。请注意,它只发生在浏览器中(我的情况是Chrome),即不在节点进程中使用相同的代码。

它让我困惑,直到我连接了一个调试器,然后我看到了问题。 String.split返回一个Array对象实例(splitTokens),它具有函数(“each”等)。 “for(var i in splitTokens)”循环也迭代函数,因此splitTokens [i] Array实例的每个函数,如果我尝试呼叫例如这个函数就会导致爆炸。 “trim()”(因为函数对象没有一个名为trim()的函数)。