Convert comma separated string to array

2018-12-31 08:48发布

I have a comma separated string that I want to convert into an array so I can loop through it.

Is there anything built-in to do this?

For e.g. I have this string

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

now want to split this by comma and store in Array object

10条回答
爱死公子算了
2楼-- · 2018-12-31 09:04
var array = string.split(',');

MDN reference, mostly helpful for the possibly unexpected behavior of the limit parameter. (Hint: "a,b,c".split(",", 2) comes out to ["a", "b"], not ["a", "b,c"].)

查看更多
深知你不懂我心
3楼-- · 2018-12-31 09:05

I had a similar issue, but more complex as I needed to transform a csv into an array of arrays (each line is one array element that inside has an array of items split by comma).

The easiest solution (and more secure I bet) was to use PapaParse (http://papaparse.com/) which has a "no-header" option that transform the csv into an array of arrays, plus, it automatically detected the "," as my delimiter.

Plus, it is registered in bower, so I only had to:

bower install papa-parse --save

and then use it in my code as follows:

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

I really liked it.

查看更多
其实,你不懂
4楼-- · 2018-12-31 09:08

Watch out if you are aiming at integers, like 1,2,3,4,5. If you intend to use the elements of your array as integers and not as strings after splitting the string, consider converting them into such.

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(",");

adding a loop like this

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

will return an array containing integers, and not strings.

查看更多
公子世无双
5楼-- · 2018-12-31 09:13

Hmm split is dangerous imho as a string can always contain a comma, observe the following:

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

So how would you interperate that? and what do you WANT the result to be? an array with:

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

even if you escape the comma you'd have a problem.

Quickly fiddled this together:

(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);

Feel free to use / edit it :)

查看更多
心情的温度
6楼-- · 2018-12-31 09:17

Note that the following:

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

will alert 1

查看更多
皆成旧梦
7楼-- · 2018-12-31 09:20

Return function

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

its accept string and objectstrings

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/

查看更多
登录 后发表回答