sort함수는 배열에 있는 요소들을 정렬하는 함수인데 이 함수는 기본적으로
Array.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 ] ]
이런식으로 특정 기준에서의 정렬과 그외의 조건에서의 정렬을 정해놓으시면 되겠습니다.
정말 여러상황에서 쓰게되는 정렬에 관해 알아보았습니다.