sort 메소드
배열에서 sort 메소드를 활용하면 배열을 정렬할 수 있습니다.
sort 메소드에 아무런 argument도 전달하지 않을 때는 기본적으로 유니코드에 정의된 문자열 순서에 따라 정렬됩니다.
const fruit = ['banana', 'apple', 'orange'];
fruit.sort();
console.log(fruit);
// ['apple', 'banana', 'orange']
이렇게 유니코드에 정의된 문자열 숨서에 따라 정렬되기에,
만약 숫자를 정렬한다면 아래처럼 오름차순이나 내림차순 정렬이 되지 않습니다.
const numbers = [1, 4, 21, 3000]
numbers.sort();
console.log(numbers);
// [1, 21, 3000, 4]
숫자 정렬
그래서 숫자를 정렬하고 싶다면 아래처럼 콜백함수를 argument로 작성하면 됩니다.
const numbers = [1, 3000, 21, 4];
// 오름차순 정렬
numbers.sort((a, b) => a - b);
console.log(numbers);
// [1, 4, 21, 3000]
// 내림차순 정렬
numbers.sort((a, b) => b - a);
console.log(numbers);
// [3000, 21, 4, 1]
원본 배열 변경 없이 sort
메소드 사용
여기서 주의할 점은 메소드를 실행하는 원본 배열의 요소들을 정렬한다는 점입니다.
그래서 다음처럼 3가지 방법으로 이를 피할 수 있습니다.
1. slice()
메소드 사용
const originalNumbers = [3, 1, 2];
const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);
console.log(originalNumbers);
// [3, 1, 2]
console.log(sortedNumbers);
// [1, 2, 3]
2. 스프레드 연산자(...
) 사용
const originalNumbers = [3, 1, 2];
const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
console.log(originalNumbers);
// [3, 1, 2]
console.log(sortedNumbers);
// [1, 2, 3]
3. Array.from()
메소드 사용
const originalNumbers = [3, 1, 2];
const sortedNumbers = Array.from(originalNumbers).sort((a, b) => a-b);
console.log(originalNumbers);
// [3, 1, 2]
console.log(sortedNumbers);
// [1, 2, 3]
객체 배열 정렬
객체 배열은 다음처럼 정렬 할 수 있습니다.
const people = [
{ name: "Park", age: 31 },
{ name: "Kim", age: 24 },
{ name: "Lee", age: 34 },
];
people.sort((a, b) => a.age - b.age);
console.log(people);
'JavaScript > JavaScript' 카테고리의 다른 글
JS 문자열 비교 연산자 (1) | 2023.10.06 |
---|---|
호이스팅(Hoisting) (0) | 2023.09.27 |
일급 객체(First-class citizen)과 고차 함수(Higher-order function) (0) | 2023.04.12 |
Named Function Expression(기명 함수 표현식) (0) | 2023.04.11 |
BigInt (0) | 2023.04.09 |