Đã có nhiều câu trả lời nhưng đây là những gì tôi sử dụng:
const chunk = (arr, size) =>
arr
.reduce((acc, _, i) =>
(i % size)
? acc
: [...acc, arr.slice(i, i + size)]
, [])
// USAGE
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chunk(numbers, 3)
// [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
Đầu tiên, kiểm tra phần còn lại khi chia chỉ số cho kích thước khối.
Nếu có một phần còn lại thì chỉ cần trả về mảng tích lũy.
Nếu không có phần còn lại thì chỉ mục chia hết cho kích thước khối, vì vậy hãy lấy một lát từ mảng ban đầu (bắt đầu từ chỉ mục hiện tại) và thêm nó vào mảng tích lũy.
Vì vậy, mảng tích lũy được trả về cho mỗi lần lặp giảm trông giống như thế này:
// 0: [[1, 2, 3]]
// 1: [[1, 2, 3]]
// 2: [[1, 2, 3]]
// 3: [[1, 2, 3], [4, 5, 6]]
// 4: [[1, 2, 3], [4, 5, 6]]
// 5: [[1, 2, 3], [4, 5, 6]]
// 6: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 7: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 8: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
// 9: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]