902 Stimmen

Wie kann ich eine kommagetrennte Zeichenkette in ein Array umwandeln?

Ich habe eine kommagetrennte Zeichenkette, die ich in ein Array konvertieren möchte, damit ich sie in einer Schleife durchlaufen kann.

Gibt es irgendetwas, das dies ermöglicht?

Ich habe zum Beispiel diese Zeichenfolge

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

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

7 Stimmen

Ich wollte nur anmerken, dass dafür kein Jquery erforderlich ist, da dies Teil von Javascript selbst ist.

2 Stimmen

4 Stimmen

Was die Duplikate betrifft, so sind diese 18 Monate älter als die Frage, auf die verwiesen wird. Wenn überhaupt, ist die andere Frage nicht nur ein Duplikat, sondern bietet aufgrund der Regex-Anforderung eine extrem komplizierte Lösung für ein sehr einfaches Problem

1487voto

Matchu Punkte 80505
var array = string.split(',');

MDN-Referenz die vor allem für das möglicherweise unerwartete Verhalten des limit Parameter. (Hinweis: "a,b,c".split(",", 2) kommt heraus zu ["a", "b"] no ["a", "b,c"] .)

3 Stimmen

Kurz und bündig, schön zu sehen, dass JavaScript string hat etwas vom Reichtum der Java String .

0 Stimmen

Bewährte Praxis für die Unterstützung aller Arten von Zeichenketten. Siehe hier stackoverflow.com/a/32657055/2632619

11 Stimmen

Während split funktioniert gut, wenn Sie sicher sind, dass Sie Elemente in array Wenn Sie Daten von einem Server/einer Datenbank erwarten, werden Sie Probleme bekommen, da ''.split(',') hat eine length === 1 IE: ''.split(',') === ['']

146voto

pop Punkte 3054

Passen Sie auf, wenn Sie auf ganze Zahlen zielen, wie 1,2,3,4,5. Wenn Sie beabsichtigen, die Elemente Ihres Arrays nach dem Aufteilen der Zeichenkette als Ganzzahlen und nicht als Strings zu verwenden, sollten Sie sie in solche umwandeln.

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 Schleife wie dieser,

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

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

49 Stimmen

Bitte beachten Sie, dass parseInt() versucht, die Basis zu erraten, wenn Sie diese nicht explizit festlegen, was zu unerwarteten Ergebnissen führen kann, wenn Sie mit führenden Nullen ( "001,002,003..." ). Vergleiche parseInt('010') con parseInt('010', 10) .

3 Stimmen

Ich würde den Kommentar von Alvaro höher bewerten, wenn ich könnte. Ich habe diese Lektion vor einiger Zeit gelernt und sie nie vergessen.

2 Stimmen

+1 Dieses Beispiel ist deutlicher und zeigt, dass string kein statisches Objekt ist, sondern die Variable, die die Zeichenfolge darstellt.

38voto

Justme Punkte 371

Hmm, split ist IMHO gefährlich, da ein String immer ein Komma enthalten kann. Beachten Sie das Folgende:

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

Wie würden Sie das also interpretieren? Und was tun Sie wollen das Ergebnis sein? Ein Array mit:

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

Selbst wenn Sie das Komma weglassen, haben Sie ein Problem.

Ich habe das schnell zusammengebastelt:

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

2 Stimmen

Dies funktioniert auch hervorragend 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 tiefgründiges Denken. Ich schätze es sehr und ich denke, die beste Antwort unter allen!

0 Stimmen

Ihr Code ist nützlich, aber Sie haben die Frage nicht beantwortet: "Gibt es irgendetwas eingebautes, um das zu tun?" Natürlich können wir eine benutzerdefinierte Funktion schreiben, wie Sie es getan haben, oder noch besser, eine der vielen bestehenden Bibliotheken importieren, die bereits geschrieben und gut getestet wurden (z.B. jquery-csv ). Aber gibt es etwas eingebaut?

31voto

Jakkwylde Punkte 1298

Die Methode split() wird verwendet, um eine Zeichenkette in ein Array von Teilzeichenfolgen aufzuteilen, und gibt das neue Array zurück.

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

0 Stimmen

Was wäre das Ergebnis? wenn ich zum Beispiel var a = "hallo, Welt, Baby"; und var array = a.split(','); --> würde mein Array wie folgt aussehen: array = ["hallo", "Welt", "Baby"]; ?

1 Stimmen

Ja, das ist richtig. Das resultierende Array würde genau so aussehen, wie Sie es erwähnen.

0 Stimmen

Ihre Antwort funktioniert bei mir, aber mein neues Array ersetzt das alte nicht. Können Sie mir helfen? 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:'PO‌​ST', success: function(result){ alert(result); var sampleTags = result.split(',');; console.log(sampleTags); }}); });

25voto

Inigo Punkte 7566

Verbessert str.split(',')

Die einfache str.split(',') hat nicht viel Grips. Hier sind einige Upgrades für verschiedene Bedürfnisse. Sie können die Funktionalität nach Herzenslust anpassen.

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

Verwendung von JSON.parse

Es mag sich wie ein kleiner Hack anfühlen, aber es ist einfach und wird von den meisten Javascript-Maschinen optimiert.

Es hat noch einige andere Vorteile, wie zum Beispiel die Unterstützung von verschachtelten Listen. Aber es gibt auch Nachteile, wie z. B. die Anforderung, dass die Eingabe richtig formatiertes JSON sein muss.

Durch die Verwendung von string.replace ähnlich wie bei der Verwendung von string.split oben, können Sie die Eingabe korrigieren. In den ersten beiden Beispielen unten passe ich an, wie ich leere Werte behandeln möchte:

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

1 Stimmen

Das ist großartig, und ich liebe diese Beispiele. Gut gemacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X