どうもライトです。

今回、JavaScriptで配列を分割する作業が出てきたのn個指定された配列を分割する方法について書いていきます。

例えば

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

という配列を4個ずつ分割した場合

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

という配列になります。

配列を分割するとなるとsliceで

const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
array.slice(0, 4)
// [1, 2, 3, 4]

となるので

const result = [
	array.slice(0, 4),
	array.slice(4, 8),
	array.slice(8, 10),
]

とすることで書けることができます。

配列の長さをn個で分割しえceilを使用して割った数を切り上げればいい感じになりそうですよね。

これをmapとfill関数を使用します。

fill関数を使う理由はmapだけだとコールバックが呼ばれないためです。

const sliceByNumber = (array, number) => {
	const length = Math.ceil(array.length / number)
	return new Array(length).fill().map((_, i) =>
		array.slice(i * number, (i + 1) * number)
	)
}

console.log(sliceByNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 4))

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

とn個に分割することができました。