为什么trim()不能使用$ .each来删除字符串数组中的空格

时间:2013-06-19 00:33:52

标签: javascript jquery

我想使用.split()从逗号分隔的字符串生成数组,但我需要摆脱空格。

var a = "one, two".split(",");

a  ==>  ["one", " two"]

a[1].trim() ==> "two"

$.each(a, function(i,v){v.trim()})  ==> ["one", " two"]

我对从数组中的第二个字符串修剪空格缺少什么,是否有更好的方法从逗号分隔的字符串中修剪空格?

5 个答案:

答案 0 :(得分:4)

您的问题是您正在检索值v.trim(),但却无法使用它。替换这部分:

$.each(a, function(i,v){v.trim()})

有了这个:

for(var i=0; i<a.length; i++) {
    a[i] = a[i].trim();
}

它应该可以正常工作。

答案 1 :(得分:2)

用正则表达式分开:

var a = "one,   two,  three  ,  four".split(/\s*,\s*/);

console.log(a); //=> ["one", "two", "three", "four"]

如果您在开头或结尾都有空格,您可以先使用trim

a = " one,   two,  three  ,  four  ".trim().split(/\s*,\s*/);

答案 2 :(得分:2)

trim()会返回修剪过的字符串,但您的原文不会被修改,因此您必须为其分配。

答案 3 :(得分:1)

你的内部函数实际上并没有返回值。正如其他人所提到的,trim返回字符串的副本,其中删除了前导和尾随空格。此外,each根本不使用函数的返回值,因此您不能使用它来替换元素。你需要

$.map(a, function(v){return v.trim();});

为此工作。 (分配给v将不起作用,因为v只是一个局部变量。)

答案 4 :(得分:1)

如果您仍然想使用jquery,则每个都这样做:

$.each(a,function(i,v){
  a[i] = v.trim();
}