서비스
home

배열을 날짜순으로 정렬하기

목적

구글 앱스 스크립트로 배열을 정렬(Sort) 하는 방법을 이해합니다.

배열 정렬이 필요한 경우?

구글 앱스 스크립트를 사용해서 배열을 만들고, 가공하고 나서 그 결과물을 구글 시트에 다시 입력해줄 때에, 날짜 내림차순/오름차순 또는 알파벳 내림차순/오름차순으로 입력해야할 필요가 있는 경우가 있습니다.
데이터를 얻는 것도 중요하지만, 이해하기 쉽게 보여주는 것도 중요하겠지요?

배열 정렬 하는 방법

배열의 정렬은 sort 메서드로 가능합니다.
위의 링크의 가장 쉬운 예제로 나온 것처럼, 간단한 경우에는 sort() 로 원하는 결과물을 얻을 수 있습니다.
const months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // expected output: Array ["Dec", "Feb", "Jan", "March"] const array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // expected output: Array [1, 100000, 21, 30, 4]
JavaScript
복사
compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬됩니다. 예를 들어 "바나나"는 "체리"앞에옵니다. 숫자 정렬에서는 9가 80보다 앞에 오지만 숫자는 문자열로 변환되기 때문에 "80"은 유니 코드 순서에서 "9"앞에옵니다.
하지만 설명된 것처럼 compareFunction이 제공되지 않으면 원하는 값을 얻지 못할 수도 있습니다.
숫자의 경우 비교를 위해 다음의 함수를 사용할 수 있습니다.
function compareNumbers(a, b) { return a - b; }
JavaScript
복사
MDN에 나온 예시를 보면, var numberArray = [40, 1, 5, 200]를 sort 한 방법에 따라 다른 결과가 나오는 것을 알 수 있습니다.
numberArray.sort() => 1,200,40,5 numberArray.sort(compareNumbers) => 1,5,40,200
JavaScript
복사
프로젝트에서 날짜 순으로 정렬할 필요가 있었는데, 사용한 코드는 다음과 같습니다.
data_array의 5번째 (data_array[4]) 가 날짜였기 때문에 element[4] 로 써주어야 합니다.
function main_script(){ ... data_array.sort(ascOrder) ... } //오름차순으로 정렬하는 함수 function ascOrder(element1, element2) { if (element1[4] > element2[4]){ return 1 } // element1이 element2 보다 크면 element2, element1 순으로 둡니다. if (element1[4] < element2[4]){ return -1 } // element2가 element1 보다 크면 element1, element2 순으로 둡니다. return 0; // 동일하면 변경하지 않음 }
JavaScript
복사
특히 배열을 정렬하는 것은 데이터 입력을 일괄로 처리할 때 유용합니다.
데이터 입력을 한 줄씩 하면 정렬도 안되지만, 속도면에서도 많이 떨어지게 되지요.

관련 포스팅