我有一个非常简单的字符串,可以包含一个可能包含空格的列表:
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"
我的问题是,有人可以解释为什么我有时会得到错误吗?如果数组从未改变我的例子,任何人都可以为我的修复提供更清晰的解决方案。
答案 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);