Wie konvertiere ich eine durch Kommas getrennte Zeichenfolge in ein Array?

720

Ich habe eine durch Kommas getrennte Zeichenfolge, die ich in ein Array konvertieren möchte, damit ich sie durchlaufen kann.

Ist dafür etwas eingebaut?

Zum Beispiel habe ich diese Zeichenfolge

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

Jetzt möchte ich dies durch Komma teilen und dann in einem Array speichern.

Blankman
quelle
7
Ich wollte nur kommentieren, dass dies keine Abfrage erfordert. Dies ist Teil von Javascript selbst.
Chris
4
In Bezug auf Duplikate: Dies liegt 18 Monate vor der referenzierten Frage. Wenn überhaupt, ist der andere nicht nur ein Betrüger, sondern bietet eine äußerst komplizierte Lösung für ein sehr einfaches Problem aufgrund der Regex-Anforderung
NotMe
40
Einfach. string.split(',');
Braden Best
4
Nicht sicher, warum dies als "zu lokalisiert" markiert ist. String Spaltung kommt ein bis Los , und ist allgemein anwendbar auf die weltweiten Publikum des Internets (wie durch die Tatsache belegt , dass meine Antwort immer noch irgendwie bekommt upvotes regelmäßig). Ich bezweifle, dass 4 andere Leute mitkommen und es wieder öffnen werden, aber trotzdem. Seltsam.
Matchu

Antworten:

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

MDN-Referenz , meistens hilfreich für das möglicherweise unerwartete Verhalten des limitParameters. (Hinweis: "a,b,c".split(",", 2)kommt heraus ["a", "b"], nicht ["a", "b,c"].)

Matchu
quelle
3
Kurz und bündig, schön zu sehen, dass JavaScript stringden Reichtum von Java hat String.
Michael Shopsin
Best Practice zur Unterstützung aller Arten von Zeichenfolgen. Siehe hier stackoverflow.com/a/32657055/2632619
Andi AR
6
Während splitfunktioniert gut, wenn Sie sicher sind, dass Sie Elemente in haben array, wenn Sie Daten von einem Server / einer Datenbank erwarten, werden Sie in Schwierigkeiten geraten, da ''.split(',')ein length === 1IE:''.split(',') === ['']
oportocala
@MichaelShopsin and All, die Split-Funktion funktioniert nicht mit IE11, da die Eigenschaft 'Split' einer undefinierten oder Null-Referenz nicht abgerufen werden kann.
DLV
@DLV, das sich wie eine neue Frage anhört, sollten Sie vielleicht stellen, nachdem Sie die IE-Fragen überprüft haben, die bereits in StackOverflow enthalten sind.
Michael Shopsin
130

Achten Sie darauf, ob Sie ganze Zahlen wie 1,2,3,4,5 anstreben. Wenn Sie die Elemente Ihres Arrays nach dem Teilen der Zeichenfolge als Ganzzahlen und nicht als Zeichenfolgen verwenden möchten, sollten Sie sie in solche konvertieren.

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

Hinzufügen einer solchen Schleife

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

gibt ein Array zurück, das Ganzzahlen und keine Zeichenfolgen enthält.

Pop
quelle
47
Bitte beachten Sie, dass parseInt () versucht, die Basis zu erraten, es sei denn, Sie legen sie explizit fest, was beim Umgang mit führenden Nullen ( "001,002,003...") zu unerwarteten Ergebnissen führen kann . Vergleiche parseInt('010')mit parseInt('010', 10).
Álvaro González
3
Ich würde Alvaros Kommentar mehr positiv bewerten, wenn ich könnte. Ich habe diese Lektion vor einiger Zeit gelernt und sie nie vergessen.
Antony Scott
2
+1 Dieses Beispiel ist klarer und zeigt, dass die Zeichenfolge kein statisches Objekt ist, sondern die Variable, die die Zeichenfolge ist.
K0D4
5
Die mapFunktion kann verwendet werden, um die Ganzzahlanalyse in einer Zeile durchzuführen:str.split(',').map(parseInt)
Jud
1
Dies ist nicht die effizienteste Lösung. Nach meinen Experimenten unter Chrome 49. JSON.parse ('[' + str + ']') ist 40% schneller als diese Lösung.
Yao
33

Hmm Split ist imho gefährlich, da eine Zeichenfolge immer ein Komma enthalten kann. Beachten Sie Folgendes:

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

Wie würden Sie das stören? und was willst du das ergebnis sein? ein Array mit:

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

Selbst wenn Sie dem Komma entkommen, hätten Sie ein Problem.

Fummelte schnell daran herum:

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

Fühlen Sie sich frei, es zu benutzen / zu bearbeiten :)

Nur ich
quelle
1
Dies funktioniert auch gut mit Zahlen und wir müssen keine separate parseInt-Schleife für sie ausführen, wie in einer anderen Antwort unten erwähnt. Das ist wirklich tiefes Denken. Schätzen Sie es sehr und ich denke, die beste Antwort unter allen !!
Anmol Saraf
28

Die split () -Methode wird verwendet, um eine Zeichenfolge in ein Array von Teilzeichenfolgen aufzuteilen und das neue Array zurückzugeben.

var array = string.split(',');
Jakkwylde
quelle
Was wäre das Ergebnis? zum Beispiel, wenn ich var a = "Hallo, Welt, Baby" habe; und var array = a.split (','); -> würde mein Array so aussehen: array = ["Hallo", "Welt", "Baby"]; ??
Schlüsselentwickler
1
Ja, das ist richtig. Das resultierende Array wäre genau so, wie Sie es erwähnen.
Jakkwylde
Ihre Antwort funktioniert für mich, aber mein neues Array ersetzt nicht das alte. Können Sie mir helfen? 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

Beachten Sie Folgendes:

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

wird alarmieren 1

user1386213
quelle
14

Übergeben Sie Ihre durch Kommas getrennte Zeichenfolge an diese Funktion, und es wird ein Array zurückgegeben. Wenn keine durch Kommas getrennte Zeichenfolge gefunden wird, wird null zurückgegeben.

 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
quelle
3
Erklären Sie bitte , warum dieser Code das aufgeworfene Problem löst , anstatt nur einen Codeblock zu veröffentlichen . Ohne eine Erklärung ist dies keine Antwort.
Martijn Pieters
1
Dies ist die korrekteste Lösung, wenn Sie nicht sicher sind, ob die Zeichenfolge Ihren Teilungswert enthält. Diese Funktion verhindert, dass die Split-Methode fehlerhaft wird, wenn die Zeichenfolge kein Komma enthält (siehe obiges Beispiel).
CoryDorning
1
Hinweis: Funktionen, die mit einem Großbuchstaben beginnen, können meistens aufgerufen werden. Verwenden Sie am besten Kleinbuchstaben für Funktionen, die nicht zum Aufrufen vorgesehen sind.
Jsterman
Dies schlug für mich fehl, als ich nur einen Wert ohne Komma hatte. Hinzugefügt else { ResultArray = [CommaSepStr]; }nach dem zweitenif
Thomas Byy
Danke habe hinzugefügt. es.
BJ Patel
8

Rückgabefunktion

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

Es akzeptiert String und 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/

Andi AR
quelle
3
Textzeichenfolgen weisen Fehler auf - SyntaxError: Zeichenfolgen für unerwartete Bezeichnernummern sind in Ordnung. z.B. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); Ergebnis ist: SyntaxError: Unerwarteter Bezeichner
Nycdanie
7

Ich weiß, dass diese Frage schon eine ganze Weile beantwortet wurde, aber ich dachte, mein Beitrag wäre für andere, die sich mit diesem Thema befassen, von Vorteil ...

Hier ist eine Funktion, die eine Zeichenfolge in ein Array konvertiert, auch wenn nur ein Element in der Liste vorhanden ist (kein Trennzeichen):

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

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

  return fullArray;
}

Verwenden Sie es so:

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

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

Ich habe diese Funktion erstellt, weil splitein Fehler ausgegeben wird, wenn die Zeichenfolge kein Trennzeichen enthält (nur ein Element).

Kabb5
quelle
3
Wenn das Trennzeichen nicht gefunden wird, wird kein Fehler ausgegeben: 'echo'.split(',')return ['echo']und ''.split(',') return ['']. Sie wird eine Fehlermeldung erhalten , wenn Sie anrufen , x.split(',')wenn xkein String (einschließlich dem xist nicht definiert oder null ), weil es keine splitFunktion für andere Arten.
Joel Lee
Ah, ich sehe, dass ich tatsächlich versucht habe, splitfür ein undefiniertes Objekt zu verwenden, als ich meine listToArray-Funktion geschrieben habe. Vielen Dank für den Hinweis ...
Kabb5
6

Ich hatte ein ähnliches Problem, aber komplexer, da ich eine CSV in ein Array von Arrays umwandeln musste (jede Zeile ist ein Array-Element, in dem sich ein Array von Elementen befindet, die durch Komma getrennt sind).

Die einfachste Lösung (und ich wette, sicherer) war die Verwendung von PapaParse ( http://papaparse.com/ ), das über eine Option "kein Header" verfügt, mit der die CSV in ein Array von Arrays umgewandelt wird. , "als mein Begrenzer.

Außerdem ist es in der Laube registriert, also musste ich nur:

bower install papa-parse --save

und dann benutze es in meinem Code wie folgt:

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

Ich mochte es wirklich.

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

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

es wird resultieren:

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

und wenn Sie Folgendes konvertieren möchten:

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

diese:

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

verwenden:

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

gute Lösung dafür

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

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

Für Array von Zeichenfolgen zu durch Kommas getrennten Zeichenfolgen

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

Sie können das folgende Snippet ausprobieren

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

Kürzeste

str.split`,`

Kamil Kiełczewski
quelle