JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで配列を指定した個数のサブ配列に分割(チャンク化)する方法

JavaScriptでは、数値の配列を第1引数として受け取り、単一の数値 num を第2引数として受け取る関数を実装する必要があります。ここで num は常に配列の長さ以下であるものとします。

この関数の役割は、num 個のサブ配列を含む新しい配列を生成することです。元の配列の長さが num でちょうど割り切れる場合、すべてのサブ配列は同じ要素数を持ちます。割り切れない場合は、最後のサブ配列だけが異なる要素数になります。

入力例と期待される出力

たとえば、入力が以下のようなケースを考えてみましょう。

const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const num = 3;

この場合の出力は次のようになります。

const output = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8]
];

8個の要素を持つ配列を3つのサブ配列に分割しているため、最初の2つのサブ配列には3要素ずつ格納され、最後のサブ配列には残りの2要素が入ります。

実装コード

この処理を実現するコードは以下の通りです。

const arr = [1, 2, 3, 4, 5, 6, 7, 8];
const num = 3;
const chunkArray = (arr = [], num = 1) => {
    const { length: l } = arr;
    const elPerArr = Math.ceil(l / num);
    const res = arr.reduce((acc, val, ind) => {
        const curr = Math.floor(ind / elPerArr);
        if(!acc[curr]){
            acc[curr] = [val];
        }else{
            acc[curr].push(val);
        }
        return acc;
    }, []);
    return res;
};
console.log(chunkArray(arr, num));

コードのポイント

  • Math.ceil(l / num): 各サブ配列に割り当てる要素数を切り上げて算出します。これにより、割り切れない場合でも余りの要素を最後のサブ配列で処理できます。
  • reduce(): 配列を走査しながら、各要素が属するサブ配列のインデックスを Math.floor(ind / elPerArr) で計算し、適切な位置へ要素を振り分けます。
  • acc[curr] の存在チェック: 対象のサブ配列がまだ存在しない場合は新規作成し、既に存在する場合は push() で要素を追加していきます。

実行結果

コンソールに出力される結果は以下の通りです。

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

このように chunkArray 関数を使えば、任意の配列を指定した個数のサブ配列に柔軟に分割できます。データのページネーションやグリッドレイアウトへの分割表示など、実務のさまざまな場面で活用できる便利なテクニックです。

  1. JavaScriptのconst宣言とは?再代入できない変数の基本と使い方を解説

    JavaScriptのconst宣言は、値を再代入することも後から再宣言することもできない変数を作成するための構文です。constはES2015(ES6)で導入されました。 const宣言の主な特徴 一度値を代入すると、別の値に再代入することはできません。 同じ名前の変数を同じスコープ内で再宣言するとエラーになります。 宣言時に必ず初期値を代入する必要があります。 ブロックスコープ({}内でのみ有効)を持ちます。 それでは、JavaScriptにおけるconst宣言の実際のコードを見ていきましょう。 サンプルコード <!DOCTYPE html> <html>

  2. JavaScriptで配列の中央値を計算する方法

    本記事では、数値の配列を受け取り、その中央値(メジアン)を返すJavaScript関数の作成方法を解説します。中央値の統計的な意味中央値とは、昇順または降順に並べ替えた数値のリストにおいて、ちょうど真ん中に位置する値のことです。極端な外れ値の影響を受けにくいため、単純な平均値よりもデータセットの実態をより正確に表せる場合があります。実装の方針まず、元の配列を変更しないようコピーしてから昇順にソートします。そのうえで、要素数に応じて処理を分けます。要素数が奇数の場合: ソート後の配列の中央にある1つの値をそのまま返します。要素数が偶数の場合: 中央に隣り合う2つの値を取り出し、その平均値を返しま