How can I convert a comma-separated string to an array?

JavascriptStringSplit

Javascript Problem Overview


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 example, I have this string

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

Now I want to split this by the comma, and then store it in an array.

Javascript Solutions


Solution 1 - Javascript

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"].)

Solution 2 - Javascript

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.

Solution 3 - Javascript

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 interpret 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.

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

Solution 4 - Javascript

The split() method is used to split a string into an array of substrings, and returns the new array.

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

Solution 5 - Javascript

Note that the following:

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

will alert 1

Solution 6 - Javascript

Pass your comma-separated string into this function and it will return an array, and if a comma-separated string is not found then it will return 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 {

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

Solution 7 - Javascript

Here is a function that will convert a string to an array, even if there is only one item in the list (no separator character):

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

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

  return fullArray;
}

Use it like this:

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

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

I created this function because split throws out an error if there isn't any separator character in the string (only one item).

Solution 8 - Javascript

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

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

it will result:

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

and if you want to convert following to:

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

this:

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

use:

str = arr.join(',')

Solution 9 - Javascript

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/

Solution 10 - Javascript

Upgraded str.split(',')

The simple str.split(',') doesn't have much smarts. Here are some upgrades for different needs. You can customize the functionality to your heart's content.

const str = "a, b,c,  d  ,e  ,f,,g"
const num = "1, 2,3,  4  ,5  ,6,,7.495"
const mix = "a, 2,3,  d  ,5  ,f,,7.495,g"

console.log(    str.split(',')
) // spaces NOT trimmed, empty values included
  // ["a", " b", "c", "  d  ", "e  ", "f", "", "g"] 

console.log(    str.split(/[ ,]+/)
) // spaces trimmed, empty values skipped
  // ["a", "b", "c", "d", "e", "f", "g"] 

console.log(    str.split(/\s*,\s*/)
) // spaces trimmed, empty values NOT skipped
  // ["a", "b", "c", "d", "e", "f", "", "g"]

console.log(    num.split(',').map(Number)
) // numbers, empty values default to zero
  // [1, 2, 3, 4, 5, 6, 0, 7.495] 

console.log(    num.split(/[ ,]+/).map(Number)
) // numbers, skips empty values
  // [1, 2, 3, 4, 5, 6, 7.495]

console.log(    mix.split(/\s*,\s*/)
                .map(x => (x === '') ? '' : (isNaN(Number(x)) ? x : Number(x)) )
) // mixed values, empty values included
  // ["a", 2, 3, "d", 5, "f", "", 7.495, "g"]

Using JSON.parse

It may feel like a bit of a hack, but it's simple and highly optimized by most Javascript engines.

It has some other advantages such as support for nested lists. But there are disadvantages, such as requiring the input to be properly formatted JSON.

By using string.replace similar to how I used string.split above, you can fix the input. In the first two examples below, I customize how I want empty values handled:

const num = "1, 2,3,  4  ,5  ,6,,7.495"
const mix = "a, 2,3,  d  ,5  ,f,7.495,g"

console.log(    JSON.parse('['+num.replace(/,\s*,/,',0,')+']')
) // numbers, empty values default to zero
  // [1, 2, 3, 4, 5, 6, 0, 7.495]

console.log(    JSON.parse('['+num.replace(/,\s*,/,',')+']')
) // numbers, skips empty values
  // [1, 2, 3, 4, 5, 6, 7.495]

console.log(    JSON.parse('['+mix.replace(/(^|,)\s*([^,]*[^0-9, ][^,]*?)\s*(?=,|$)/g,'$1"$2"')+']') 
) // mixed values, will ERROR on empty values
  // ["a", 2, 3, "d", 5, "f", "7.495", "g"]  

Solution 11 - Javascript

I had a similar issue, but more complex as I needed to transform a CSV file 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 which has a "no-header" option that transform the CSV file 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.

Solution 12 - Javascript

A good solution for that:

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

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

Solution 13 - Javascript

Shortest

str.split`,`

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

let arr = str.split`,`;

console.log(arr);

Solution 14 - Javascript

I made php script to convert string to array, and you can run it into your browser, so is easy

<form method="POST">
    <div>
        <label>String</label> <br>
        <input name="string" type="text">
    </div>
    <div style="margin-top: 1rem;">
        <button>konvert</button>
    </div>
</form>

<?php

$string = @$_POST['string'];

if ($string) {
    $result = json_encode(explode(",",$string));
    echo " '$result' <br>";
}
?>

Solution 15 - Javascript

let myString = "January,February,March,April,May,June,July,August,September,October,November,December";
	  const temp=myString .split(",");
	  console.log(temp);

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

Very simple you can use the split default javascript function for this.

Solution 16 - Javascript

If the user makes a typo by adding an extra space. You could use something like this.

tags: foo,  zar, gar
const stringToArr = (string) => {
  return string.trim.split(",");
};

Solution 17 - Javascript

As @oportocala mentions, an empty string will not result in the expected empty array.

So to counter, do:

str
.split(',')
.map(entry => entry.trim())
.filter(entry => entry)

For an array of expected integers, do:

str
.split(',')
.map(entry => parseInt(entry))
.filter(entry => typeof entry ==='number')

Solution 18 - Javascript

For an array of strings to a comma-separated string:

let months = ["January","Feb"];
let monthsString = months.join(", ");

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBlankmanView Question on Stackoverflow
Solution 1 - JavascriptMatchuView Answer on Stackoverflow
Solution 2 - JavascriptpopView Answer on Stackoverflow
Solution 3 - JavascriptJustmeView Answer on Stackoverflow
Solution 4 - JavascriptJakkwyldeView Answer on Stackoverflow
Solution 5 - Javascriptuser1386213View Answer on Stackoverflow
Solution 6 - JavascriptBJ PatelView Answer on Stackoverflow
Solution 7 - JavascriptKabb5View Answer on Stackoverflow
Solution 8 - JavascriptMubeen KhanView Answer on Stackoverflow
Solution 9 - JavascriptAndi ARView Answer on Stackoverflow
Solution 10 - JavascriptInigoView Answer on Stackoverflow
Solution 11 - JavascriptDiego PamioView Answer on Stackoverflow
Solution 12 - JavascriptManspofView Answer on Stackoverflow
Solution 13 - JavascriptKamil KiełczewskiView Answer on Stackoverflow
Solution 14 - JavascriptRahmad Al HabibView Answer on Stackoverflow
Solution 15 - JavascriptForce BoltView Answer on Stackoverflow
Solution 16 - JavascriptAnton KouliavtsevView Answer on Stackoverflow
Solution 17 - JavascriptCyberProdigyView Answer on Stackoverflow
Solution 18 - JavascriptSrikanth GowdaView Answer on Stackoverflow