본문 바로가기
Programming/JavaScript

배열(Array)을 일정한 사이즈에 맞춰 나누는 방법 | Algorithm | JavaScript

by 혀코 2020. 9. 4.

안녕하세요. 혀코입니다.

이번 시간에는 배열(Array)을 일정한 사이즈에 맞춰 나누는 방법에 대해서 알아보겠습니다.

 

function chunk(array, size) {
   const chunked = [];

   for (let element of array) {
      const last = chunked[chunked.length - 1];

      if(!last || last.length === size) {
         chunked.push([element])
      } else {
         last.push(element);
      }
   }

   return chunked;
}

module.exports = chunk;

비어있는 배열(Array)을 하나 만들고, 받은 배열을 for of loop을 사용해 돌립니다. 비어있는 배열의 마지막 element를 last로 지정하고 마지막 element값이 없거나, 또는 마지막 엘레멘트의 길이가 정해진 사이즈와 동일한 경우 새로운 배열에 추가합니다. 

array = [1, 2, 3], size = 2 의 경우 처음 1의 경우, chunked.push([1])에 의해서 추가가 되고, chunked.length 는 1이 됩니다. 그리고 다시 loop을 돌때, chunked.length는 1에서 last 값은 [1]이 되고 last.length 는 1이 됩니다. 따라서 else문을 통과해서 last = [1,2]가 됩니다. 다시 loop을 돌때는 last.length 값이 2로 size 값과 동일해서, chunked.push([3])에 의해서 추가가 됩니다. 따라서 chunked를 리턴하면, [1,2],[3] 형식으로 들어가는 것을 확인할 수 있습니다.

 

배열은  slice 함수로 나눌 수 있습니다. slice 함수를 사용할 때는  slice(x, y) 이렇게 지정하면, x 인덱스부터 y-1 인덱스를 기존 인덱스로부터 잘라서 표시해줍니다.

let array2 = [2,3,4,5,6];

console.log(array2.slice(1,3));

// [3,4]

slice 함수를 사용해서 배열을 일정한 사이즈에 맞춰 나누는 방법은 다음과 같습니다.

function chunk(array, size) {
   const chunked = [];
   let index = 0;

   while (index < array.length) {
      chunked.push(array.slice(index, index+size));
      index += size;
   }

   return chunked;
}

module.exports = chunk;

 

 

비어있는 배열을 하나 만들고, 인덱스 초기값을 0으로 만들어 줍니다. 인덱스 값이 배열의 길이 보다 작을 경우 while loop을 돌리는데 사이즈에 맞는 배열을 잘라서 비어있는 배열에 추가시켜주고, 인덱스 값을 사이즈 만큼 증가 시켜주면, 배열을 일정한 사이즈에 맞춰 나눌 수 있습니다.

 

이렇게 배열(Array)을 일정한 사이즈에 맞춰 나누는 방법에 대해서 알아봤습니다.

유용하셨다면, 공감과 구독 부탁 드립니다.

감사합니다.

댓글