JavaScriptでLINQのChunkのようにデータをチャンクに分割する方法

.NET 8以降で使えるEnumerable.Chunk()のように、JavaScriptでデータのチャンク化を行う方法。ジェネレータを使ってEnumrableのような遅延評価もできます。


サンプルソースコード

通常版:

function chunk(array, chunkSize) {
    const result = [];
    for (let i = 0; i < array.length; i += chunkSize) {
        result.push(array.slice(i, i + chunkSize));
    }
    return result;
}

遅延評価(ジェネレータ)版:

function* chunk(array, chunkSize) {
    for (let i = 0; i < array.length; i += chunkSize) {
        yield array.slice(i, i + chunkSize);
    }
}


使い方

通常版:

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const chunked = chunk(array, 4);
console.log(chunked);

遅延評価(ジェネレータ)版:

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

for (let part of chunk(array, 2)) {
    console.log(part);
}

出力結果

チャンクサイズが2のとき:

[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

チャンクサイズが4のとき:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]


以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする