sort 메소드

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);