web-dev-qa-db-fra.com

Convertir une chaîne séparée par des virgules en tableau

J'ai une chaîne séparée par des virgules que je veux convertir en tableau afin que je puisse le parcourir en boucle.

Y a-t-il quelque chose d'intégré pour faire cela?

Par exemple J'ai cette ficelle

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

veulent maintenant diviser cela par une virgule et stocker dans l'objet Array

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

Référence MDN , particulièrement utile pour le comportement éventuellement inattendu du paramètre limit. (Astuce: "a,b,c".split(",", 2) sort ["a", "b"], pas ["a", "b,c"].)

1064
Matchu

Attention si vous visez des nombres entiers, comme 1,2,3,4,5. Si vous avez l'intention d'utiliser les éléments de votre tableau sous forme d'entiers et non de chaînes après avoir scindé la chaîne, envisagez de les convertir en tels.

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

ajouter une boucle comme celle-ci

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

retournera un tableau contenant des entiers et non des chaînes.

120
pop

Hmm split est dangereux à mon humble avis, car une chaîne de caractères peut toujours contenir une virgule. 

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

Alors, comment voulez-vous interagir avec ça? et que voulez-vous que le résultat soit? un tableau avec: 

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

même si vous échappiez à la virgule, vous auriez un problème.

Rapidement bidouiller cela ensemble: 

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

N'hésitez pas à l'utiliser/à le modifier :) 

28
Justme

La méthode split () est utilisée pour scinder une chaîne en un tableau de sous-chaînes et renvoie le nouveau tableau.

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

Notez que ce qui suit:

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

va alerter 1

13
user1386213

Passez votre chaîne séparée par des virgules dans cette fonction et elle retournera un tableau. Si elle n'est pas une chaîne séparée par des virgules, elle retournera null.

 function SplitTheString(CommaSepStr) {
       var ResultArray = null; 

        if (CommaSepStr!= null) {
            var SplitChars = ',';
            if (CommaSepStr.indexOf(SplitChars) >= 0) {
                ResultArray = CommaSepStr.split(SplitChars);

            }
        }
       return ResultArray ;
    }
8
BJ Patel

Fonction de retour

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

sa chaîne d'acceptation et 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/

6
Andi AR

Je sais que cette question a reçu une réponse pendant un bon bout de temps, mais je pensais que ma contribution serait bénéfique pour les autres personnes effectuant des recherches sur ce sujet ...

Voici une fonction qui convertira une chaîne en un tableau, même s'il n'y a qu'un seul élément dans la liste (sans caractère de séparation):

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

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

  return fullArray;
}

Utilisez-le comme ceci:

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

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

J'ai créé cette fonction car split génère une erreur s'il n'y a pas de caractère séparateur dans la chaîne (un seul élément)

4
Kabb5

J'avais un problème similaire, mais plus complexe que je devais transformer un csv en un tableau de tableaux (chaque ligne est un élément de tableau qui contient un tableau d'éléments divisé par une virgule).

La solution la plus simple (et plus sûre, je parie) consistait à utiliser PapaParse ( http://papaparse.com/ ), qui dispose d’une option "sans en-tête" qui transforme le fichier csv en tableau détecté automatiquement le "," comme délimiteur.

De plus, il est enregistré dans Bower, il ne me restait donc qu'à:

bower install papa-parse --save

puis utilisez-le dans mon code comme suit:

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

J'aime vraiment ça.

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

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

il en résultera:

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

et si vous voulez convertir ce qui suit en:

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

ce: 

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

utilisation:

str = arr.join(',')
1
Mubeen Khan

bonne solution pour cela

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

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