
Chunk 함수는 인자로 배열과 size를 받아서 배열 size만큼의 조각으로 나눈 후 새로운 배열을 return 하는 함수이다
예시:
const arr = [1, 2, 3, 4, 5, 6, 7];
console.log(chunk(arr, 2));
// 👉 [[1, 2], [3, 4], [5, 6], [7]]
console.log(chunk(arr, 3));
// 👉 [[1, 2, 3], [4, 5, 6], [7]]
console.log(chunk(arr, 4));
// 👉 [[1, 2, 3, 4], [5, 6, 7]]
export function chunk<T>(arr: readonly T[], size: number): T[][] {
if (!Number.isInteger(size) || size < 1) {
throw new Error('Size must be an integer greater than zero.');
}
const result: T[][] = [];
for (let i = 0; i < arr.length; i += size) {
result.push(arr.slice(i, i + size));
}
return result;
}
함수의 인자로 arr와 size를 받고 같이 받은 제네릭 타입 T의 2차원 배열을 리턴한다
함수의 라인1 에서 size가 정수가 아니거나 1 미만일때 Error를 리턴하여
size가 정수가 아니거나 문자열일때를 방지한다.
(!Number.isInterger(size)는 size가 정수가 아닐때 true를 리턴한다)
Number.isInteger(10) // true
Number.isInteger(10.5) // false
Number.isInteger("10") // false
Number.isInteger(NaN) // false
const result: T[][] = [];
for (let i = 0; i < arr.length; i += size) {
result.push(arr.slice(i, i + size));
}
return result;
const result: T[][] = [];는 chunk함수가 실행되고 인자로 받은 arr가 쪼개진 후 chunk함수가 적용될 배열인 result를 선언한다.
for 반복문은 전달받은 배열 arr의 길이가 i보다 클 동안 실행된다.
이때 i는 한 번에 나눌 조각의 크기(size)만큼 증가하며,
arr.slice(i, i + size)로 잘라낸 배열 조각을 새로운 배열 result에 push한다.
이 과정을 반복하면 배열이 지정한 크기대로 나뉘어 result에 담기고,
마지막에 남은 요소들도 하나의 배열로 묶여 result에 추가된다.
모든 반복이 끝나면 result를 반환해 chunk 함수가 완성된다.