Come convertire una stringa separata da virgola in un array?


720

Ho una stringa separata da virgola che voglio convertire in un array, quindi posso scorrere attraverso di essa.

C'è qualcosa di incorporato per farlo?

Per esempio ho questa stringa

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

ora voglio dividerlo per la virgola e quindi memorizzarlo in un array.


7
Volevo solo commentare che questo non richiede jquery, questo fa parte del javascript stesso.
Chris,


4
Per quanto riguarda i duplicati: questo precede la domanda di riferimento di 18 mesi. Se non altro, l'altro non è solo un duplicato ma offre una soluzione estremamente complicata per un problema molto semplice a causa del requisito regex
NotMe

40
Facile. string.split(',');
Braden Best

4
Non sono sicuro del perché questo sia contrassegnato come "troppo localizzato". La suddivisione delle stringhe arriva molto , ed è generalmente applicabile al pubblico di Internet in tutto il mondo (come dimostra il fatto che la mia risposta in qualche modo ottiene ancora voti regolari). Dubito che altre 4 persone verranno e riapriranno, ma comunque. Strano.
Matchu,

Risposte:


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

Riferimento MDN , utile soprattutto per il comportamento imprevisto del limitparametro. (Suggerimento: "a,b,c".split(",", 2)viene fuori ["a", "b"], non ["a", "b,c"].)


3
Breve e dolce, bello vedere che JavaScript stringha un po 'della ricchezza di Java String.
Michael Shopsin

Best practice per supportare tutti i tipi di stringhe. Vedi qui stackoverflow.com/a/32657055/2632619
Andi AR,

6
Mentre splitfunzionerà bene se sei sicuro di avere degli elementi array, se ti aspetti dati da un server / database potresti avere dei problemi dato che ''.split(',')ha un length === 1IE:''.split(',') === ['']
oportocala

@MichaelShopsin e All, la funzione split non funziona con IE11 come dice Impossibile ottenere la proprietà 'Split' di riferimento indefinito o nullo.
DLV

@DLV che suona come una nuova domanda, forse dovresti chiedere dopo aver controllato le domande di IE già su StackOverflow.
Michael Shopsin

130

Fai attenzione se stai mirando a numeri interi, come 1,2,3,4,5. Se si intende utilizzare gli elementi dell'array come numeri interi e non come stringhe dopo aver diviso la stringa, è consigliabile convertirli in tali.

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

aggiungendo un ciclo come questo

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

restituirà un array contenente numeri interi e non stringhe.


47
Nota che parseInt () tenta di indovinare la base a meno che tu non lo imposti esplicitamente, il che può causare risultati imprevisti quando si tratta di zeri iniziali ( "001,002,003..."). Confronta parseInt('010')con parseInt('010', 10).
Álvaro González,

3
Vorrei valorizzare di più il commento di Alvaro se potessi. Ho imparato quella lezione qualche tempo fa e non l'ho mai dimenticata.
Antony Scott,

2
+1 Questo esempio è più chiaro, dimostrando che la stringa non è un oggetto statico ma in realtà la variabile che è la stringa.
K0D4,

5
La mapfunzione può essere utilizzata per eseguire l'analisi dell'intero in una riga:str.split(',').map(parseInt)
Jud

1
Questa non è la soluzione più efficiente. Secondo i miei esperimenti con Chrome 49. JSON.parse ('[' + str + ']') è il 40% più veloce di questa soluzione.
Yao,

33

La divisione Hmm è pericolosa, poiché una stringa può sempre contenere una virgola, osservare quanto segue:

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

Quindi come lo faresti? e cosa vuoi che sia il risultato? un array con:

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

anche se si evita la virgola si avrebbe un problema.

Rapidamente risolto questo insieme:

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

Sentiti libero di usarlo / modificarlo :)


1
Funziona benissimo anche con i numeri e non è necessario eseguire un ciclo di analisi separato per loro, come indicato in un'altra risposta di seguito. Questo è un vero pensiero profondo. Lo apprezzo molto e penso che la migliore risposta tra tutte !!
Anmol Saraf,

28

Il metodo split () viene utilizzato per dividere una stringa in una matrice di sottostringhe e restituisce la nuova matrice.

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

quale sarebbe il risultato? per esempio se ho var a = "ciao, mondo, piccola"; e var array = a.split (','); -> il mio array sarebbe simile a questo: array = ["hello", "world", "baby"]; ??
sviluppatore chiave

1
Si, è corretto. L'array risultante sarebbe proprio come dici tu.
Jakkwylde,

La tua risposta funziona per me, ma il mio nuovo array non sta sostituendo quello vecchio. Mi potete aiutare? 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

Si noti che quanto segue:

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

avviserà 1


14

Passa la tua stringa separata da virgola in questa funzione e restituirà un array e, se non viene trovata una stringa separata da virgola, restituirà 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
Invece di pubblicare solo un blocco di codice, spiega perché questo codice risolve il problema posto. Senza una spiegazione, questa non è una risposta.
Martijn Pieters

1
Questa è la soluzione più corretta se non sei sicuro che la stringa conterrà il tuo valore di divisione. Questa funzione eviterà che il metodo split si rovini se la stringa non ha una virgola (dato l'esempio sopra).
CoryDorning,

1
Nota: le funzioni che iniziano con una lettera maiuscola sono, il più delle volte, progettate per essere invocate. meglio usare lettere minuscole su funzioni che non sono progettate per essere invocate.
Jsterman,

Questo fallì per me quando avevo un solo valore senza virgole. Aggiunto else { ResultArray = [CommaSepStr]; }dopo il secondoif
Thomas Byy,

Grazie aggiunto. esso.
BJ Patel,

8

Funzione di ritorno

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

accetta stringhe e stringhe di oggetti

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
le stringhe di testo presentano errori - SyntaxError: le stringhe di numeri identificativi imprevisti sono ok. per esempio. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); il risultato è: SintassiError: identificatore imprevisto
nycdanie

7

So che questa domanda ha avuto una risposta da un po 'di tempo, ma ho pensato che il mio contributo sarebbe stato utile per gli altri che ricercano questo argomento ...

Ecco una funzione che converte una stringa in un array, anche se nell'elenco è presente un solo elemento (nessun carattere separatore):

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

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

  return fullArray;
}

Usalo in questo modo:

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

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

Ho creato questa funzione perché splitgenera un errore se nella stringa non è presente un carattere di separazione (solo un elemento)


3
Nessun errore viene generato se il separatore non viene trovato: 'echo'.split(',')restituisce ['echo']e ''.split(',') restituisce ['']. Si avrà un errore se si chiama x.split(',')quando xnon è una stringa (anche quando xè indefinito o nulla ), perché non v'è alcuna splitfunzione disponibile per altri tipi.
Joel Lee,

Ah, vedo che stavo effettivamente cercando di usare splitun oggetto indefinito quando ho scritto la mia funzione listToArray. Grazie per
averlo

6

Ho avuto un problema simile, ma più complesso in quanto avevo bisogno di trasformare un CSV in una matrice di matrici (ogni riga è un elemento di matrice che al suo interno ha una matrice di elementi divisa per virgola).

La soluzione più semplice (e più sicura scommetto) era usare PapaParse ( http://papaparse.com/ ) che ha un'opzione "no-header" che trasforma il csv in un array di array, inoltre, ha rilevato automaticamente il " , "come mio delimitatore.

Inoltre, è registrato in pergolato, quindi dovevo solo:

bower install papa-parse --save

e poi usalo nel mio codice come segue:

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

Mi è veramente piaciuto.


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

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

risulterà:

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

e se vuoi convertire i seguenti in:

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

Questo:

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

uso:

str = arr.join(',')

3

buona soluzione per quello

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

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

1

Per matrice di stringhe in stringa separata da virgola

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

1

puoi provare il seguente frammento

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.