sort로 정렬하기

윤지섭·2023년 9월 8일

sort함수란

sort함수는 배열에 있는 요소들을 정렬하는 함수인데 이 함수는 기본적으로

Array.sort();

이런 모양인데 이처럼 파라미터를 넣어주지 않을경우 내부에서 먼저 문자열로 변환하는 과정을 거칩니다 그래서 숫자 배열의 경우 두자리수 이상이거나 음수가 존재할 경우 제대로된 정렬이 이루어지지 않습니다.

sort를 그냥 사용했을 경우 문제

var arr = [2, 200, 300, 1000];
var arr2 = [-3, -1, 0, 2, 4, 5];


console.log(arr.sort());
console.log(arr2.sort());

결과
>
[ 1000, 2, 200, 300 ]
[ -1, -3, 0, 2, 4, 5 ]

이런식으로 -와 0자체는 구분하나 맨앞자리수에 의해 정렬이 되는것을 확인할 수 있습니다

그래서 제대로된 정렬을 하기 위해선 sort함수에 파라미터를 넣으면 됩니다.

arr.sort(function(a, b)  {
  if(a > b) return 1;
  if(a === b) return 0;
  if(a < b) return -1;
});

이런식으로 파라미터안 함수의 결과값으로 정렬을 하게되는데 기준이
1.함수의 리턴값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬
2.함수의 리턴값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬
3.0을 리턴하면, a와 b의 순서를 변경하지 않음

오름차순 정렬

var arr3 = [2, 1, 4, 5, 3];
console.log(arr3.sort((a, b) => a - b));

결과
>
[1,2,3,4,5]

위의 sort 함수를 간소화 한것으로 a와 b의 차이가 양수인지 음수인지로 정렬이 가능합니다.

내림차순 정렬

var arr3 = [2, 1, 4, 5, 3];
console.log(arr3.sort((a, b) => b - a));

결과
>
[5,4,3,2,1]

오름차순과 형태는 거의 비슷하게 a-b를 b-a로 바꿔주면 내림차순 정렬이 가능합니다.

다중 조건으로 정렬하기

값이 한쌍씩 들어있는 배열들을 정렬할때 기본적으로 뒤에있는 값으로 정렬하되,뒷값이 같을경우 앞에있는 값으로 정렬 하려고 합니다.

var arr = [
  [1, 2],
  [2, 3],
  [1, 3],
  [3, 4],
  [1, 4],
];
console.log(arr.sort((a, b) => {
if(a[1]===b[1]) return a[0]-b[0];
else return a[1] - b[1]
}));

결과
>
[ [ 1, 2 ], [ 1, 3 ], [ 2, 3 ], [ 1, 4 ], [ 3, 4 ] ]

이런식으로 특정 기준에서의 정렬과 그외의 조건에서의 정렬을 정해놓으시면 되겠습니다.

마치며

정말 여러상황에서 쓰게되는 정렬에 관해 알아보았습니다.

profile
개발자를 꿈꾸는 사람

0개의 댓글