Ich habe nach einer präziseren Methode gesucht, um mehrdimensionale Arrays in Javascript darzustellen. Daher möchte ich eine Möglichkeit finden, ein Array mithilfe mehrerer Trennzeichen zusammen mit der in Javascript integrierten string.split(separator) -Methode zu trennen.

Beispielsweise würde die Zeichenfolge "what, am, I; doing, here, now" zu [["what", "am", "I"],["doing", "here", "now"]].

Gibt es eine präzise Möglichkeit, eine Funktion zu implementieren, die dies tut?

var theString = "what, am, I; doing, here, now";
var theArray = getArray(theString, [",", ";"]); //this should return [["what", "am", "I"],["doing", "here", "now"]].

function getArray(theString, separators){
    //convert a string to a multidimensional array, given a list of separators
}
4
Anderson Green 8 Dez. 2012 im 10:27

3 Antworten

Beste Antwort

LETZTE BEARBEITUNG

Ich habe einige Kommas in den Worten hinterlassen, wie @Tom betont. Hier ist der endgültige Code:

var str = "what, am, I; doing, here, now";

var arr = str.split(/\;\s*/g);
for (var i = 0; i < arr.length; i++){
    arr[i] = arr[i].split(/\,\s*/g);
}
console.log(arr);

UND FIDDLE


Teilen Sie zuerst das zweite Trennzeichen und dann jedes Element auf dem anderen Trennzeichen auf.

var str = "what, am, I; doing, here, now";

var arr = str.split(';');
for (var i = 0; i < arr.length; i++){
    arr[i] = arr[i].split(' ');
}

LIVE DEMO

Beachten Sie, dass Sie ein wenig bereinigen müssen, um den leeren Bereich im zweiten Array zu entfernen, aber das sollte einfach sein.


BEARBEITEN - Ich fühlte mich energisch - so tötest du diesen nervigen führenden Raum

var str = "what, am, I; doing, here, now";

var arr = str.split(';');
for (var i = 0; i < arr.length; i++){
    arr[i] = arr[i].replace(/^\s*/, '').split(' ');
}

AKTUALISIERTES FIDDLE


EDIT - deshalb liebe ich so sehr. Per @Nathan können Sie einfach die Regex aufteilen und Ärger sparen

var str = "what, am, I; doing, here, now";

var arr = str.split(/\;\s*/g);
for (var i = 0; i < arr.length; i++){
    arr[i] = arr[i].split(' ');
}
console.log(arr);

AKTUALISIERTES FIDDLE

7
Adam Rackis 8 Dez. 2012 im 07:50

Ich habe eine Lösung gefunden, die eine beliebige Anzahl von Trennzeichen verarbeiten kann, basierend auf diese Antwort hier .

function getArray(theString, separators) {
    separators = separators.reverse();
    var theArray = theString.split(separators[0]);
    for (var j = 1; j < separators.length; j++) {
        theArray = theArray.map(function mapper(v, i, a) {
            if (typeof v == "string") {
                return v.split(separators[j]);
            } else {
                return v.map(mapper);
            }
        });
    }
    return theArray;
}

console.log(JSON.stringify(getArray("A, b, c; d, e, f;g,h,i'a, b, c;d,e,f", [",", ";", "'"])));
//this will write [[["A"," b"," c"],[" d"," e"," f"],["g","h","i"]],[["a"," b"," c"],["d","e","f"]]] to the console.
0
Community 23 Mai 2017 im 12:29

Das sollte funktionieren:

var theString = "what, am, I; another, string; doing, here, now";
 //this should return [["what", "am", "I"],["doing", "here", "now"]].

function getArray(theString, separators){
    //Firs split
    var strings = theString.replace(/\s+/g, '').split(separators.pop());
    //Second split
        var sep = separators.pop();
        for (var i = 0; i < strings.length; i++) {
            strings[i] = strings[i].split(sep);
        };
    console.log(strings);
    return strings;
}

var theArray = getArray(theString,["," ,";" ]);

Aktualisieren:

Jetzt sollte der Code funktionieren: http://jsfiddle.net/beTEq/1/

1
Tom Sarduy 9 Dez. 2012 im 19:11