如何将逗号分隔的字符串转换为数组?


719

我有一个用逗号分隔的字符串,我想将其转换为数组,因此可以循环遍历它。

有内置的功能吗?

例如,我有这个字符串

var str = "January,February,March,April,May,June,July,August,September,October,November,December";

现在我想用逗号将其分割,然后将其存储在数组中。


7
只是想发表评论,这不需要jquery,这是javascript本身的一部分。
克里斯(Chris


4
关于重复:这比参考问题早18个月。如果有的话,由于正则表达式要求,另一个不仅是骗子,而且为非常简单的问题提供了极其复杂的解决方案
NotMe 2013年

40
简单。string.split(',');
Braden Best

4
不知道为什么将其标记为“太本地化”。字符串分割谈到了很多,并且一般适用于互联网的全世界的观众(的事实,我的回答仍然不知何故经常得到upvotes证明)。我怀疑还有4个人会重新打开它,但是仍然如此。奇怪的。
Matchu 2013年

Answers:


1216
var array = string.split(',');

MDN参考,主要用于limit参数可能发生的意外行为。(提示:"a,b,c".split(",", 2)出来的["a", "b"]不是["a", "b,c"]。)


3
简短而有趣,很高兴看到JavaScript string具有Java的丰富功能String
Michael Shopsin

支持所有类型的字符串的最佳实践。参见此处stackoverflow.com/a/32657055/2632619
Andi AR

6
虽然split将正常工作,如果你确信你有元素array,如果你从服务器/数据库期望的数据,你会遇到麻烦,因为''.split(',')有一个length === 1IE:''.split(',') === ['']
oportocala

@MichaelShopsin和所有,split函数不适用于IE11,因为它说无法获取未定义或空引用的属性“ Split”。
DLV

@DLV听起来像是一个新问题,也许您应该在检查StackOverflow上已经存在的IE问题之后再询问。
Michael Shopsin

130

请注意是否要针对整数,例如1,2,3,4,5。如果打算在拆分字符串后将数组的元素用作整数而不是字符串,请考虑将其转换为此类。

var str = "1,2,3,4,5,6";
var temp = new Array();
// this will return an array with strings "1", "2", etc.
temp = str.split(",");

添加这样的循环

for (a in temp ) {
    temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro's comment
}

将返回一个包含整数而不是字符串的数组。


47
请注意,除非明确设置基数,否则parseInt()会尝试猜测基数,这在处理前导零("001,002,003...")时可能会导致意外结果。parseInt('010')与比较parseInt('010', 10)
阿尔瓦罗·冈萨雷斯

3
如果可以的话,我会更多地支持Alvaro的评论。我在前一课中学到了这一点,但从未忘记。
安东尼·斯科特

2
+1此示例更加清楚,说明字符串不是静态对象,而实际上是字符串的变量。
K0D4

5
map函数可用于在一行中进行整数分析:str.split(',').map(parseInt)
2014年

1
这不是最有效的解决方案。根据我在Chrome 49上进行的实验,JSON.parse('['+ str +']')比该解决方案快40%。
2016年

33

Hmm split是危险的恕我直言,因为字符串始终可以包含逗号,请注意以下几点:

var myArr = "a,b,c,d,e,f,g,','";
result = myArr.split(',');

那么,您将如何与之打交道?您希望得到什么结果?具有以下内容的数组:

['a', 'b', 'c', 'd', 'e', 'f', 'g', '\'', '\''] or 
['a', 'b', 'c', 'd', 'e', 'f', 'g', ',']

即使您摆脱了逗号,也会遇到问题。

迅速将它们摆在一起:

(function($) {
    $.extend({
        splitAttrString: function(theStr) {
            var attrs = [];

            var RefString = function(s) {
                this.value = s;
            };
            RefString.prototype.toString = function() {
                return this.value;
            };
            RefString.prototype.charAt = String.prototype.charAt;
            var data = new RefString(theStr);

            var getBlock = function(endChr, restString) {
                var block = '';
                var currChr = '';
                while ((currChr != endChr) && (restString.value !== '')) {
                    if (/'|"/.test(currChr)) {
                        block = $.trim(block) + getBlock(currChr, restString);
                    }
                    else if (/\{/.test(currChr)) {
                        block = $.trim(block) + getBlock('}', restString);
                    }
                    else if (/\[/.test(currChr)) {
                        block = $.trim(block) + getBlock(']', restString);
                    }
                    else {
                        block += currChr;
                    }
                    currChr = restString.charAt(0);
                    restString.value = restString.value.slice(1);
                }
                return $.trim(block);
            };

            do {
                var attr = getBlock(',', data);
                attrs.push(attr);
            }
            while (data.value !== '');
            return attrs;
        }
    });
})(jQuery);

随意使用/编辑它:)


1
这同样适用于数字,并且我们不必像下面另一个答案中所述为它们运行单独的parseInt循环。这是真正的深层思考。非常感谢,我认为这是最好的答案!
Anmol Saraf 2012年

28

split()方法用于将字符串拆分为子字符串数组,并返回新数组。

var array = string.split(',');

结果会是什么?例如,如果我有var a =“ hello,world,baby”; 和var array = a.split(','); ->我的数组看起来像这样:array = [“ hello”,“ world”,“ baby”]; ??
重要的开发人员

1
对,那是正确的。结果数组就像您提到的那样。
Jakkwylde 2011年

您的答案对我有用,但是,我的新阵列不能替代旧阵列。你能帮助我吗? var sampleTags = ['vinita@itsabacus.com']; console.log(sampleTags); $("#order_id").on("change", function() { var order_id = document.getElementById('order_id').value; $.ajax({url: "model/getUserMailIds.php",data:{order_id:order_id},type:'POST', success: function(result){ alert(result); var sampleTags = result.split(',');; console.log(sampleTags); }}); });
Vinita Pawar

16

请注意以下几点:

 var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);

会提醒1


14

将您的逗号分隔的字符串传递给此函数,它将返回一个数组,如果找不到逗号分隔的字符串,则将返回null。

 function splitTheString(CommaSepStr) {
       var ResultArray = null; 

// Check if the string is null or so.
        if (CommaSepStr!= null) {


             var SplitChars = ',';
   // Check if the string has comma of not will go to else
                if (CommaSepStr.indexOf(SplitChars) >= 0) {
                    ResultArray = CommaSepStr.split(SplitChars);

                }
             else { 
  // string has only one value, can also check the length of the string or time and cross-check too. 
                    ResultArray = [CommaSepStr]; 
              }
        }
       return ResultArray ;
    }

3
而不是仅发布一段代码,请解释为什么此代码可以解决所提出的问题。没有解释,这不是答案。
马丁·彼得斯

1
如果不确定字符串是否包含拆分值,这是最正确的解决方案。如果字符串没有逗号(鉴于上述示例),此函数将防止split方法出错。
CoryDorning,2013年

1
注意:大多数情况下,以大写字母开头的函数都被设计为可被调用。最好在不旨在被调用的函数上使用小写字母。
Jsterman 2013年

当我只有一个没有逗号的值时,这对我来说就失败了。else { ResultArray = [CommaSepStr]; }在第二个之后添加if
Thomas Byy

谢谢补充。它。
BJ Patel

8

返回功能

var array = (new Function("return [" + str+ "];")());

它接受字符串和对象字符串

var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/


3
文本字符串有错误-SyntaxError:意外的标识符编号字符串是可以的。例如。 var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); 结果是:SyntaxError:意外的标识符
nycdanie

7

我知道这个问题已经回答了很长时间,但是我认为我的贡献对其他研究该主题的人将是有益的。

这是一个将字符串转换为数组的函数,即使列表中只有一项(没有分隔符)也是如此:

function listToAray(fullString, separator) {
  var fullArray = [];

  if (fullString !== undefined) {
    if (fullString.indexOf(separator) == -1) {
      fullAray.push(fullString);
    } else {
      fullArray = fullString.split(separator);
    }
  }

  return fullArray;
}

像这样使用它:

var myString = 'alpha,bravo,charlie,delta';
var myArray = listToArray(myString, ',');
myArray[2]; // charlie

var yourString = 'echo';
var yourArray = listToArray(yourString, ',');
yourArray[0]; // echo

我创建此函数是因为split如果字符串中没有分隔符(仅一项),则会引发错误


3
如果找不到分隔符,则不会引发任何错误:'echo'.split(',')return ['echo']''.split(',') return ['']。你如果你调用得到一个错误x.split(',')的时候x是不是字符串(包括当x未定义),因为没有split可用于其他类型的功能。
乔尔·李

啊,我看到我实际上split在编写listToArray函数时试图使用未定义的对象。感谢您指出这一点...
Kabb5

6

我遇到了类似的问题,但是由于我需要将csv转换为数组数组(每行是一个数组元素,内部具有一个由逗号分隔的项的数组),因此问题更加复杂。

最简单的解决方案(我敢打赌,更安全)是使用PapaParse(http://papaparse.com/),它具有“ no-header”选项,可将csv转换为数组数组,此外,它会自动检测到“ ”作为分隔符。

另外,它已在凉亭中注册,因此我只需要:

bower install papa-parse --save

然后在我的代码中使用它,如下所示:

var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;

我真的很喜欢它。


5
let str = "January,February,March,April,May,June,July,August,September,October,November,December"

let arr = str.split(',');

它会导致:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

如果要将以下内容转换为:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

这个:

"January,February,March,April,May,June,July,August,September,October,November,December";

采用:

str = arr.join(',')

3

好的解决方案

let obj = ['A','B','C']

obj.map((c) => { return c. }).join(', ')



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.