.trim()不是函数

时间:2015-10-07 11:40:51

标签: javascript arrays 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"

我的问题是,有人可以解释为什么我有时会得到错误吗?如果数组从未改变我的例子,任何人都可以为我的修复提供更清晰的解决方案。

4 个答案:

答案 0 :(得分:3)

split()不适用于数组,但适用于字符串。 当您将String写入数组时,您必须通过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 :(得分:1)

在符合ES6标准的运行时(即:节点4+)中,您可以使用使用箭头功能,为您提供更简洁的代码来实现您的目标:

{{1}}

答案 2 :(得分:0)

我看到同样的问题试图使用“for(var i in splitTokens)”迭代String.split的输出。请注意,它只发生在我的浏览器中(在我的情况下是Chrome),即在节点进程中使用相同的代码时没有。

在我连接调试器然后看到问题之前,它让我很困惑。 String.split返回一个Array对象实例(splitTokens),它上面有函数(“each”等)。 “for(var i in splitTokens)”循环也迭代了函数,因此splitTokens [i]正在回归,例如Array实例的每个函数,如果我试图调用例如,它会导致事件爆炸“trim()”(因为函数对象没有名为trim()的函数)。

答案 3 :(得分:0)

很明显,您的代码可能存在其他问题,但特别针对您的问题 .trim() 不是函数,该函数的调用方式发生了变化,尤其是对于 jQuery 3.5 以上。这已经在别处解释过,但被带到这里以供快速参考:

对于使用 jQuery 3.5 及以下的代码,通常的函数调用有效:

let xString = " This is my string with spaces  ";
let xTrimmed = xString.trim();

但是对于使用 jQuery 3.5 以上的代码:

let xString = " This is my string with spaces  ";
let xTrimmed = $.trim(xString);