Comment convertir une chaîne séparée par des virgules en un tableau?

720

J'ai une chaîne séparée par des virgules que je veux convertir en tableau, donc je peux la parcourir.

Y a-t-il quelque chose de intégré pour ce faire?

Par exemple, j'ai cette chaîne

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

maintenant, je veux diviser cela par la virgule, puis le stocker dans un tableau.

Blankman
la source
7
Je voulais juste dire que cela ne nécessite pas de jquery, cela fait partie du javascript lui-même.
Chris
4
Concernant les doublons: cela précède la question référencée de 18 mois. Si quoi que ce soit, l'autre n'est pas seulement un dupe, mais offre une solution extrêmement compliquée pour un problème très simple en raison de l'exigence de regex
NotMe
40
Facile. string.split(',');
Braden Best
4
Je ne sais pas pourquoi cela est marqué comme "trop ​​localisé". Fractionnement de chaîne est un lot , et est généralement applicable au public dans le monde entier de l'Internet (comme en témoigne le fait que ma réponse encore obtient en quelque sorte upvotes régulièrement). Je doute que 4 autres personnes viendront le rouvrir, mais, quand même. Bizarre.
Matchu

Réponses:

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

Référence MDN , principalement utile pour le comportement éventuellement inattendu du limitparamètre. (Indice: "a,b,c".split(",", 2)sort ["a", "b"], non ["a", "b,c"].)

Matchu
la source
3
Bref et doux, agréable de voir que JavaScript stringa un peu la richesse du Java String.
Michael Shopsin
Meilleure pratique pour prendre en charge tous les types de chaînes. Voir ici stackoverflow.com/a/32657055/2632619
Andi AR
6
Bien que splitcela fonctionnera bien si vous êtes sûr d'avoir des éléments array, si vous attendez des données d'un serveur / base de données, vous rencontrerez des problèmes car il ''.split(',')a un length === 1IE:''.split(',') === ['']
oportocala
@MichaelShopsin et All, la fonction split ne fonctionne pas avec IE11 comme son dicton Impossible d'obtenir la propriété 'Split' de référence non définie ou nulle.
DLV
@DLV qui ressemble à une nouvelle question, vous devriez peut-être demander après avoir vérifié les questions IE déjà sur StackOverflow.
Michael Shopsin
130

Attention si vous visez des 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 sous forme de chaînes après avoir fractionné 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
}

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

pop
la source
47
Veuillez noter que parseInt () essaie de deviner la base à moins que vous ne l'ayez explicitement définie, ce qui peut entraîner des résultats inattendus lorsque vous utilisez des zéros de début ( "001,002,003..."). Comparez parseInt('010')avec parseInt('010', 10).
Álvaro González
3
Je voterais davantage pour le commentaire d'Alvaro si je le pouvais. J'ai appris cette leçon il y a quelque temps et je ne l'ai jamais oubliée.
Antony Scott
2
+1 Cet exemple est plus clair, démontrant que la chaîne n'est pas un objet statique mais en fait la variable qui est la chaîne.
K0D4
5
La mapfonction peut être utilisée pour effectuer l'analyse syntaxique des nombres entiers sur une seule ligne:str.split(',').map(parseInt)
Jud
1
Ce n'est pas la solution la plus efficace. D'après mes expériences sous Chrome 49. JSON.parse ('[' + str + ']') est 40% plus rapide que cette solution.
Yao
33

Le partage Hmm est dangereux à mon humble avis car une chaîne peut toujours contenir une virgule, observez les points suivants:

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

Alors, comment interféreriez-vous cela? 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 échappez à la virgule, vous auriez un problème.

Agit rapidement 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 :)

Juste moi
la source
1
Cela fonctionne également très bien avec les nombres et nous n'avons pas à exécuter une boucle parseInt distincte pour eux comme mentionné dans une autre réponse ci-dessous. C'est une vraie réflexion profonde. Je l'apprécie beaucoup et je pense que la meilleure réponse parmi toutes !!
Anmol Saraf
28

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

var array = string.split(',');
Jakkwylde
la source
quel serait le résultat? par exemple si j'ai var a = "bonjour, monde, bébé"; et var array = a.split (','); -> mon tableau ressemblerait-il à ceci: array = ["hello", "world", "baby"]; ??
développeur pivot
1
Oui c'est correct. Le tableau résultant serait exactement comme vous le mentionnez.
Jakkwylde
Votre réponse fonctionne pour moi mais, mon nouveau tableau ne remplace pas l'ancien. Pouvez-vous m'aider? var sampleTags = ['[email protected]']; 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

Notez que ce qui suit:

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

alertera 1

user1386213
la source
14

Passez votre chaîne séparée par des virgules dans cette fonction et elle renverra un tableau, et si aucune chaîne séparée par des virgules n'est trouvée, elle renverra 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 ;
    }
BJ Patel
la source
3
Plutôt que de publier uniquement un bloc de code, veuillez expliquer pourquoi ce code résout le problème posé. Sans explication, ce n'est pas une réponse.
Martijn Pieters
1
C'est la solution la plus correcte si vous n'êtes pas sûr que la chaîne contiendra votre valeur de fractionnement. Cette fonction empêchera la méthode de division de générer des erreurs si la chaîne n'a pas de virgule (dans l'exemple ci-dessus).
CoryDorning
1
Remarque: les fonctions commençant par une majuscule sont, la plupart du temps, conçues pour être appelées. il est préférable d'utiliser des lettres minuscules sur les fonctions qui ne sont pas conçues pour être appelées.
Jsterman
Cela a échoué pour moi quand je n'avais qu'une seule valeur sans virgule. Ajouté else { ResultArray = [CommaSepStr]; }après le deuxièmeif
Thomas Byy
Merci ont ajouté. il.
BJ Patel
8

Fonction de retour

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

sa chaîne d'acceptation et ses chaînes d'objet

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/

Andi AR
la source
3
les chaînes de texte comportent des erreurs - SyntaxError: les chaînes de numéros d'identification inattendues sont correctes. par exemple. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); le résultat est: SyntaxError: identifiant inattendu
nycdanie
7

Je sais que cette question a reçu une réponse depuis un certain temps, mais je pensais que ma contribution serait bénéfique pour les autres chercheurs sur ce sujet ...

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

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 splitjette une erreur s'il n'y a pas de caractère séparateur dans la chaîne (un seul élément)

Kabb5
la source
3
Aucune erreur n'est renvoyée si le séparateur est introuvable: 'echo'.split(',')retourne ['echo']et ''.split(',') retourne ['']. Vous aurez obtenir une erreur si vous appelez x.split(',')quand xest pas une chaîne (y compris quand xest indéfini ou nulle ), parce qu'il n'y a pas de splitfonction disponible pour d' autres types.
Joel Lee
Ah, je vois qu'en fait j'essayais d'utiliser splitpour un objet non défini quand j'ai écrit ma fonction listToArray. Merci de l'avoir signalé ...
Kabb5
6

J'ai eu un problème similaire, mais plus complexe car j'avais besoin de 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) était d'utiliser PapaParse ( http://papaparse.com/ ) qui a une option "sans en-tête" qui transforme le csv en un tableau de tableaux, en plus, il a automatiquement détecté le " , "comme mon délimiteur.

De plus, il est enregistré dans bower, donc je n'avais qu'à:

bower install papa-parse --save

puis l'utiliser dans mon code comme suit:

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

J'aime vraiment ça.

Diego Pamio
la source
5
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 souhaitez convertir ce qui suit en:

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

cette:

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

utilisation:

str = arr.join(',')
Mubeen Khan
la source
3

bonne solution pour ça

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

obj.map((c) => { return c. }).join(', ')
Manspof
la source
1

Pour un tableau de chaînes en chaîne séparée par des virgules

let months = ["January","Feb"];
let monthsString = months.join(", ");
Srikanth Gowda
la source
1

vous pouvez essayer l'extrait de code suivant

 var str = "How,are,you,doing,today?";
    var res = str.split(",");
    console.log("My Result:",res)
Aakash Sajjad
la source
1

Le plus court

str.split`,`

Kamil Kiełczewski
la source