JavaScript入門 配列をいくつかの塊に分けてみよう

今回やりたいことは以下のような配列を

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

以下のように加工することです。

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

いくつの塊にわけるかは引数で指定できると良いです。上記の場合2です。

一例

const chunkArray = (arr, chunkSize) => {
	const result = [];
  
  while(arr.length) {
  	result.push(arr.splice(0, chunkSize));
  }
  
  return result;
};

const arr = [1,2,3,4,5,6,7,8,9];
const chunk = chunkArray(arr, 2);
console.log(chunk); // [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
console.log(arr); // []

Array.prototype.splice を使って、chunkSize で指定された長さを切り取り、それを result に push します。

arr.length が 0 になったらループを抜けます。

このコードで注意が必要なのは、元のarrが変化してしまっていることです。(上のコードの場合 arr.splice にしてしまうと無限ループになるので注意)

Array.from を使うやり方の場合

const chunkArray = (arr, chunkSize) => {
	return Array.from({length: Math.ceil(arr.length / chunkSize)}, (_, i) =>
  	arr.slice(i * chunkSize, i * chunkSize + chunkSize)
  );
};

const arr = [1,2,3,4,5,6,7,8,9];
const chunk = chunkArray(arr, 2);