簡體   English   中英

Javascript中的多維數組分隔符

[英]Multidimensional array separators in Javascript

我一直在尋找一種更簡潔的方式來表示Javascript中的多維數組,所以我想找到一種方法來使用多個分隔符來分隔數組,以及Javascript的內置string.split(separator)方法。

例如,字符串"what, am, I; doing, here, now"將成為[["what", "am", "I"],["doing", "here", "now"]]

有沒有簡潔的方法來實現這樣做的功能?

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
}

最后的編輯

@Tom指出,我在文字中留下了一些逗號。 這是最終的代碼:

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

和提


首先在第二個分隔符上拆分,然后在另一個分隔符上拆分每個成員。

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

現場演示

請注意,您必須進行一點點清理才能刪除第二個數組中的空白區域,但這應該很簡單。


編輯 - 我感覺精力充沛 - 這就是你如何殺死惱人的領先空間

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

更新后的


編輯 - 這就是我愛這么多的原因。 按@Nathan,你可以拆分正則表達式並省去一些麻煩

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

更新后的

這應該工作:

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

更新:

現在代碼應該工作: http//jsfiddle.net/beTEq/1/

基於這個答案 ,我找到了一個可以處理任意數量分隔符的解決方案

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM