4

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
}
4

3 に答える 3

7

最終編集

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

そしてフィドル


最初に 2 番目のセパレーターで分割し、次に各メンバーを別のセパレーターで分割します。

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

ライブデモ

2 番目の配列の空のスペースを削除するには、少しクリーンアップを行う必要がありますが、それは簡単なはずです。


編集 - 私は元気を感じていました - これがあなたがその迷惑な先頭のスペースを殺す方法です

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

更新されたフィドル

于 2012-12-08T06:30:16.013 に答える
1

これはうまくいくはずです:

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/

于 2012-12-08T06:46:59.443 に答える
0

この回答 hereに基づいて、任意の数のセパレータを処理できるソリューションを見つけました。

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.
于 2013-05-12T04:20:46.770 に答える