JavaScriptで配列をチャンク化する方法:2要素ずつのサブ配列に分割する
JavaScriptでは、リテラルの配列を受け取り、元の配列の要素をちょうど長さ2のサブ配列に分割した新しい配列を返す関数を実装する必要がある場面があります。元の配列の長さが2で割り切れない場合、最後のサブ配列には1つの要素のみが含まれるようにします。
例えば、入力配列が以下の場合:
const arr = [1, 2, 3, 4, 5, 6, 7];
期待される出力は次のとおりです。
const output = [[1, 2], [3, 4], [5, 6], [7]]
それでは、この関数を実装してみましょう。
実装例
この処理を行うコードは以下の通りです。
const arr = [1, 2, 3, 4, 5, 6, 7];
const chunk = arr => {
const size = 2;
const chunkedArray = [];
for (let i = 0; i < arr.length; i++) {
const last = chunkedArray[chunkedArray.length - 1];
if(!last || last.length === size){
chunkedArray.push([arr[i]]);
}else{
last.push(arr[i]);
}
};
return chunkedArray;
};
console.log(chunk(arr));出力結果
コンソールには以下のように表示されます。
[ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7 ] ]
コードの仕組み
この関数のロジックはシンプルです。まず、チャンクのサイズとしてsize = 2を定義し、結果を格納するための空の配列chunkedArrayを用意します。ループ処理の中では、常にchunkedArrayの最後のサブ配列を参照し、その配列が存在しない場合、またはすでにサイズがsizeに達している場合には新しいサブ配列を作成して追加します。それ以外の場合は、既存の最後のサブ配列に現在の要素を追加していきます。これにより、余った要素が自動的に最後の小さなサブ配列に収まるため、配列の長さが偶数でも奇数でも正しく動作します。
-
JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方
JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時
-
JavaScriptにおける配列とSetの違いとは?重複値の扱いと要素アクセスをわかりやすく解説
JavaScriptのSet(セット)オブジェクトは、ES2015(ES6)で新たに導入されたデータ型です。従来から広く使われている配列(Array)と比べると、いくつか重要な違いがあります。 配列とSetの主な違い 重複した値の扱い: 配列は同じ値をいくつでも格納できますが、Setでは同一の値は1つしか保持されません。重複した値は自動的に除外されるのが大きな特徴です。 要素へのアクセス方法: 配列ではインデックス(例:arr[0])を使って任意の位置の要素へ直接アクセスできます。一方、Setにはインデックスの概念がなく、要素は挿入された順序どおりに先頭から順番に辿ることしかできません。