Hoe kan ik een door komma’s gescheiden tekenreeks naar een array converteren?

Ik heb een door komma’s gescheiden tekenreeks die ik wil omzetten in een array, zodat ik er doorheen kan lopen.

Is er iets ingebouwd om dit te doen?

Ik heb bijvoorbeeld deze string

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

Nu wil ik dit splitsen door de komma en het dan opslaan in een array.


Antwoord 1, autoriteit 100%

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

MDN-referentie, meestal nuttig voor het mogelijk onverwachte gedrag van de parameter limit. (Hint: "a,b,c".split(",", 2)komt uit op ["a", "b"], niet ["a", "b,c"].)


Antwoord 2, autoriteit 10%

Pas op als je op gehele getallen mikt, zoals 1,2,3,4,5. Als je van plan bent om de elementen van je array als gehele getallen te gebruiken en niet als strings na het splitsen van de string, overweeg dan om ze naar dergelijke te converteren.

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

Zo’n lus toevoegen,

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

geeft een array terug die gehele getallen bevat, en geen strings.


Antwoord 3, autoriteit 3%

Hmm, splitsen is gevaarlijk IMHO omdat een string altijd een komma kan bevatten. Let op het volgende:

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

Dus hoe zou je dat interpreteren? En wat wil je willenhet resultaat zijn? Een array met:

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

Zelfs als je de komma ontwijkt, heb je een probleem.

Ik heb dit snel in elkaar geknutseld:

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

4

Ik had een soortgelijk probleem, maar complexer als ik nodig had om een ​​CSV-bestand in een reeks arrays te transformeren (elke regel is één array-element dat binnenkant een reeks items heeft gespleten door komma).

De gemakkelijkste oplossing (en zeker veiliger) was om PapaParsete gebruiken met een “no-header” optie die het CSV-bestand omzet in een array van arrays, plus, het detecteerde automatisch de “,” als mijn scheidingsteken.

Bovendien is het geregistreerd in Bower, dus ik hoefde alleen maar:

bower install papa-parse --save

En gebruik het dan als volgt in mijn code:

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

Ik vond het erg leuk.


Antwoord 5

Een goede oplossing daarvoor:

let obj = ['A','B','C']
obj.map((c) => { return c. }).join(', ')

Antwoord 6

Kortste

str.split`,`

Codefragment weergeven


Antwoord 7

Geüpgraded str.split(',')

De simpele str.split(',')heeft niet veel intelligentie. Hier zijn enkele upgrades voor verschillende behoeften. U kunt de functionaliteit naar hartenlust aanpassen.

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

Snippet uitvouwen


Antwoord 8

Je kunt het volgende fragment proberen:

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

Antwoord 9

Ik heb een php-script gemaakt om string naar array te converteren, en je kunt het in je browser uitvoeren, dus het is gemakkelijk

<form method="POST">
    <div>
        <label>String</label> <br>
        <input name="string" type="text">
    </div>
    <div style="margin-top: 1rem;">
        <button>konvert</button>
    </div>
</form>
<?php
$string = @$_POST['string'];
if ($string) {
    $result = json_encode(explode(",",$string));
    echo " '$result' <br>";
}
?>

Antwoord 10

Als de gebruiker een typfout maakt door een extra spatie toe te voegen. Je zou zoiets kunnen gebruiken.

tags: foo,  zar, gar
const stringToArr = (string) => {
  return string.trim.split(",");
};

Antwoord 11

Zoals @oportocala vermeldt, zal een lege string niet resulteren in de verwachte lege array.

Dus tegengaan:

str
.split(',')
.map(entry => entry.trim())
.filter(entry => entry)

Voor een array van verwachte gehele getallen, doe:

str
.split(',')
.map(entry => parseInt(entry))
.filter(entry => typeof entry ==='number')

Antwoord 12

let myString = "January,February,March,April,May,June,July,August,September,October,November,December";
      const temp=myString .split(",");
      console.log(temp);

Uitvoer:-
 [“januari”, “februari”, “maart”, “april”, “mei”, “juni”, “juli”, “augustus”, “september”, “oktober”, “november”, “december” ]

Heel eenvoudig, je kunt hiervoor de splitstandaard javascript-functie gebruiken.


Antwoord 13

Voor een array van strings naar een door komma’s gescheiden string:

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

Other episodes