
자바스크립트 정렬 함수 sort()문 이해 (
이해하기 너무 힘들었던 1인)
📌 sort()함수는 배열을 재정렬해주는 메소드지만 배열 자체가 변경되기 때문에 사용할때 주의해야함
arr.sort([compareFunction])
sort()를 사용하면, 배열의 element들을 문자열로 취급하고, 유니코드 값의 순서대로 정렬이 된다.
compareFunction은 두 개의 배열(a,b)를 element를 파라미터로 입력을 받고,
여기서 가장 중요한건 리턴하는 값이 0보다 작을 경우는 a가 b보다 앞에 오도록 정렬을하고,
만약 리턴하는 값이 0보다 클 경우에는 b가 a보다 앞에 오도록 정렬을 한다.
또한 0을 리턴하면 a,b의 순서를 변경하지 않는다.
📎 숫자 정렬 예제
let arr = [1, 3, 5, 2, 4];
arr.sort();
console.log(arr); // [1, 2, 3, 4, 5]
결과값이 오름차순으로 나오는 이유는 sort()함수는 유니코드에 순서에 따라서 정렬이 되기 때문에 오름차순으로 정렬이 잘 된다.
하.지.만
let arr = [1, 3, 5, 10, 2];
arr.sort();
console.log(arr); // [1, 10, 2, 3, 5]
이 코드는 왜 오름차순으로 정확하게 정렬이 되지 않았을까?
그 이유는 유니코드에 있다.
아까 우리가 처음 sort()함수를 설명할때 sort()를 사용하면 element들을 문자열로 취급하고, 유니코드 값의 순서대로 정렬이 된다고 나와 있다.
바로 그 이유이다. ([유니코드]:(https://url.kr/r4l89o) 참고 하도록 하자.)
유니코드로 정렬을 하게 되면 10이 2보다 유니코드에서 앞에 있기 때문에 [1, 10, 2, 3, 5]로 결과 값이 나오는 것이다.
우리는 [1, 2, 3, 5, 10]의 순서로 정렬하기 위해서
let arr = [1, 3, 5, 10, 2];
arr.sort(function(a, b) { // arr.sort((a, b) => a - b)
return a - b;
});
console.log(arr); // [1, 2, 3, 5, 10]
이러한 코드를 사용해야 한다.
아마 사람들은 왜 a - b을 하는지 궁금해 할건데,
sort()함수는 리턴하는 값이 0보다 작을 경우에 a가 b보다 앞에 오도록 정렬하고,
리턴하는 값이 0보다 큰 경우에는 b가 a보다 앞에 오도록 정렬이 된다.
또한 리턴하는 값이 0이면 아무것도 바꾸지 않는다. 따라서 [1, 2, 3, 5, 10]으로 결과 값을 구할수 있었다.
반대로 내림차순으로 구하고 싶다면 reverse()를 사용하거나 a - b 를 b - a로 바꾸어 주면 된다.
📎 문자열 정렬
let arr = ['hello', 'a', 'b', 'c'];
arr.sort();
console.log(arr); // ['a', 'b', 'c', 'hello'];
유니코드는 알파벳순으로 정렬할때 개꿀이다.