JavaScriptで配列をN個の部分配列(チャンク)に分割する方法
JavaScriptで配列をN個の部分配列(チャンク)に分割する方法
JavaScriptでは、リテラルを格納した配列と数値nを受け取り、元の配列をn個の部分配列(チャンク)に分割した新しい配列を返す関数を実装したい場面があります。なお、nは必ず配列の長さ以下であると仮定します。
入力例
たとえば、入力配列が以下の場合を考えてみましょう。
const arr = [1,2,3,4,5,6,7,8,9,10];
const n = 3;
期待される出力
この場合、出力は次のようになります。
const output = [[1,2,3],[4,5,6],[7,8,9,10]];
実装コード
この処理を実現するコードは以下のとおりです。
const arr = [1,2,3,4,5,6,7,8,9,10];
const n = 3;
const divideIntoChunks = (arr, count) => {
const res = [];
const size = arr.length / count;
let ind = 0;
while (ind < arr.length) {
res.push(arr.slice(ind, ind += size));
};
return res;
};
console.log(divideIntoChunks(arr, n));
コードの解説
まず、配列の長さ ÷ チャンク数で1つのチャンクに含まれる要素数を算出します。上の例では 10 ÷ 3 = 3.33… となります。
次に、whileループで配列の先頭から順にslice()メソッドを使って要素を切り出し、結果配列に追加していきます。slice()の終了位置に「現在のインデックス+チャンクサイズ」を指定しているため、ループが進むごとに切り出し範囲が自動的に移動します。
要素数がチャンク数で割り切れない場合は、余りの要素がすべて最後のチャンクにまとめられます。そのため、上記の例では3つ目のチャンクに4つの要素が含まれています。
実行結果
コンソールには以下のように出力されます。
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9, 10 ] ]
-
JavaScriptで配列を指定した個数のサブ配列に分割(チャンク化)する方法
JavaScriptでは、数値の配列を第1引数として受け取り、単一の数値 num を第2引数として受け取る関数を実装する必要があります。ここで num は常に配列の長さ以下であるものとします。この関数の役割は、num 個のサブ配列を含む新しい配列を生成することです。元の配列の長さが num でちょうど割り切れる場合、すべてのサブ配列は同じ要素数を持ちます。割り切れない場合は、最後のサブ配列だけが異なる要素数になります。入力例と期待される出力たとえば、入力が以下のようなケースを考えてみましょう。const arr = [1, 2, 3, 4, 5, 6, 7, 8]; const num = 3
-
JavaScriptで文字列配列内の各単語の出現回数を正確に数える方法
JavaScriptでは、2つの文字列配列を扱う場面があります。1つは単語のリストを表し、もう1つは複数の文を表すものです。例えば、以下のような配列を考えてみましょう。const names= [jhon, parker]; const sentences = [hello jhon, hello parker and parker, jhonny jhonny yes parker];要件ここで求められているのは、これら2つの文字列配列を引数として受け取るJavaScript関数を作成することです。この関数は、最初の names 配列に含まれる各文字列をキーとし、sentences 配列全体