3

したがって、次のような文字列があります。

123,532,0302,1234 など (延々と続き、500 を超えることもあります)。ただし、カンマで区切られたリストを 40 個の配列に分割したいだけです。PHP のarray_chunkに似ています (ただし、配列があります)。

これを達成するための最良の方法は何ですか?

4

2 に答える 2

4
String.prototype.chunk = function(n) {
if (typeof n=='undefined') n=2;
return this.match(RegExp('.{1,'+n+'}','g'));
};

使用例:

var s = 'abcdefghijklmnopqrstuvwxyz1234';
var a = s.chunk(6);

収量:

var a = ['abcdef','ghijkl','mnopqr','stuvwx','yz1234'];

http://javascript.about.com/library/blchunk.htmから取得

編集:私の最初の答えが質問に答えていないことに気付いたので、ここを見てください:

String.prototype.chunkArr = function (length) {
    var data = this.split(",");
    var result = Array();
    while(data.length > 0) {
        result.push(
            data.splice(0,length)
            .join(",") // comment this or remove line out if you don't want it to re-join into a CSV list of 40 items
        );
    }
    return result;
}

使用例:

myData = "1,2,3,2,4,5,1,5,1,23,1,23,12,3,12,3,12,3,12,3,12,3,12";
console.log(myData.chunkArr(2)); // Change 2 to 40 if you have longer data

収量:

myData = ["1,2", "3,2", "4,5", "1,5", "1,23", "1,23", "12,3", "12,3", "12,3", "12,3", "12,3", "12"]

上記の関数の.join(",")セクション (7 行目あたり)をコメントアウトまたは削除すると、関数は次のようになります。chunkArr

myData = [
    ["1", "2"], 
    ["3", "2"], 
    ["4", "5"], 
    ["1", "5"], 
    ["1", "23"], 
    ["1", "23"], 
    //... and so on
]

はい、「モード」を変更するために2番目の引数を追加できたことはわかっています..しかし、怠惰が続きました:)

于 2012-06-27T09:11:03.250 に答える
0

目的の出力を正しく理解している場合は、すべてのコンマで分割し、結果の長い配列を 40 以下のいくつかの配列に分割できます。

function splitChunkIntoArrays(data, chunkLength) {
    var temp = data.split(",");
    var output = [];
    var item = [];
    for (var i = 0; i < temp.length; i++) {
        // if item is now full, put it into the result and start a new chunk
        if (item.length == chunkLength) {
            output.push(item);
            item = [];
        }
        item.push(temp[i]);
    }
    // if anything in the last chunk, put it in the result
    if (item.length != 0) {
        output.push(item);
    }
    return(output);
}

// sample output from splitChunkIntoArrays:
[
    [1,2,3,4,..40],
    [41,42,43,...80],
    [81,82,83,...120],
    [121,123,124]
]

これにより、各内部配列の長さがchunkLengthアイテムより長くない配列の配列が得られます。

結果の 40 アイテムの長い部分を文字列のままにしたい場合 (質問では完全に明確ではありませんでした)、内側の配列を再度結合できます。

function splitChunkIntoStrings(data, chunkLength) {
    var splitData = splitChunkIntoArrays(data, chunkLength);
    var results = [];
    for (var i = 0; i < splitData.length i++) {
        results.push(splitData[i].join(","));
    }
    return(results);
}

// sample output from splitChunkIntoStrings:
[
    "1,2,3,4,..40",
    "41,42,43,...80",
    "81,82,83,...120",
    "121,123,124"
]

これにより、文字列の配列が生成され、各文字列には 40 以下のコンマ区切り値が含まれます。


そして、これは array を使用した最初の関数のもう少し合理化されたバージョンですsplice():

function splitChunkIntoArrays(data, chunkLength) {
    var temp = data.split(","), result = [];
    while (temp.length > 0) {
        result.push(temp.splice(0, chunkLength));
    }
    return(result);
}

または、結果を文字列のままにしたい場合は、次のようにします。

function splitChunkIntoStrings(data, chunkLength) {
    var temp = data.split(","), result = [];
    while (temp.length > 0) {
        result.push(temp.splice(0, chunkLength).join(","));
    }
    return(result);
}
于 2012-06-27T09:21:36.207 に答える