자바스크립트의 sort()
메소드는 특정 배열을 정렬하고, 정렬된 배열을 리턴합니다. 기본 정렬은 오름차순이며, 요소를 문자열로 전환한 다음 UTF-16 코드 단위 값을 따라 이를 비교합니다.
배열 정렬
먼저, 문자가 담겨 있는 배열을 정렬해보도록 하겠습니다.
const fruits = ["pineapple", "cherry", "apple"];
fruits.sort();
console.log(fruits); // Array ["apple", "cherry", "pineapple"]
다음으로 숫자가 담겨 있는 배열을 정렬해 보도록 하겠습니다.
const numbers = [1, 30, 4, 21, 10000];
numbers.sort();
console.log(numbers); // Array [1, 10000, 21, 30, 4]
앞서 언급했듯, sort()
메소드는 배열의 요소를 문자열로 전환해서 비교하기 때문에, 숫자를 비교할 때 예기치 않은 결과가 출력됐습니다. 이를 [1, 4, 21, 30, 10000]
으로 정렬하려면 다음처럼 각 값을 비교해줘야 합니다(Infinity
또는 NaN
은 처리 불가).
const numbers = [1, 30, 4, 21, 10000];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); // Array [1, 4, 21, 30, 10000];
또는 화살표 함수를 사용해 다음과 같이 간단하게 표현할 수도 있습니다.
numbers.sort((a, b) => a - b);
이는 배열 내 두 요소에 뺄셈 연산을 진행하여, 결과가 음수일 경우 a
가 b
보다 작은 값으로 판단되어 앞으로 이동하고, 결과가 양수일 경우 큰 값으로 판단되어 뒤로 이동하는 방식입니다.
객체 정렬
sort()
를 사용해 객체의 프로퍼티 값에 따라 이를 정렬할 수도 있습니다.
let people = [
{name: "Jay", age: 21},
{name: "Lee", age: 61},
{name: "Kim", age: 41},
{name: "Park", age: 27},
{name: "Min", age: 11},
{name: "Soo", age: 31},
];
// 나이 순으로 정렬
people.sort(function (a, b) {
return a.age - b.age;
});
// 이름 순으로 정렬
people.sort(function(a, b) {
let nameA = a.name.toUpperCase();
let nameB = b.name.toUpperCase();
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
return 0; // 이름이 동일한 경우
})
참고 자료:
'개발 > JavaScript' 카테고리의 다른 글
자바스크립트 동기/비동기 차이점은 무엇일까요? (0) | 2020.11.23 |
---|---|
자바스크립트 문자열로 함수를 실행하는 방법 (0) | 2020.11.20 |
자바스크립트 메모이제이션 설명 (0) | 2020.11.17 |