[js] 정렬 메서드 sort()

Subin Ryu·2024년 11월 13일
0
post-thumbnail

정렬 메서드 sort()

  1. 개념
  2. 사용법
  3. 주의할 점

개념

  • 배열의 요소를 특정 기준에 따라 정렬해주는 메서드
  • 원본 배열을 직접 변경

사용법

1. 매개변수가 없는 경우 - 유니코드 포인트 순서(문자나 기호의 고유한 번호로 할당)로 정렬

let numbers = [30, 2, 10];
numbers.sort();
console.log(numbers); // 출력: [10, 2, 30] (유니코드 순서로 정렬됨)
  • "문자열" 순서로 정렬되기 때문에 예상과 다른 결과가 나올 수 있음

2. 숫자 제대로 정렬

  • 두 수를 비교할때 a는 뒤에 요소 b는 앞의 요소임
let numbers = [30, 2, 10];
numbers.sort((a, b) => {
console.log(a,b)
  return 0
});
// 출력: 2, 30
//      10, 2    

a(뒤 요소),b(앞 요소)를 비교해 연산했을때,
음수 : 두 자리 바꿈
양수 : 그대로
0 : 그대로

  • 오름 차순 정렬
let numbers = [30, 2, 10];
numbers.sort((a, b) => a - b);
console.log(numbers); // 출력: [2, 10, 30]
  • 내림 차순 정렬
let numbers = [30, 2, 10];
numbers.sort((a, b) => b - a);
console.log(numbers); // 출력: [30, 10, 2]
  • 전체 리스트에 대해 정렬할때는 음수면 배열순서 반대가 됨
let numbers = [30, 2, 10];
numbers.sort((a, b) => -1);
console.log(numbers); // 출력: [10, 2, 30]

3. 다양한 방식으로 정렬

  • 문자열 길이 순으로 정렬
let words = ["apple", "banana", "kiwi", "cherry"];
words.sort((a, b) => a.length - b.length);
console.log(words); // 출력: ["kiwi", "apple", "cherry", "banana"]
  • 문자열을 알파벳 순으로 정렬
let fruits = ["banana", "apple", "cherry"];
fruits.sort();
console.log(fruits); // 출력: ["apple", "banana", "cherry"]
  • 객체 배열 정렬
let users = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 20 },
  { name: "Charlie", age: 30 }
];

// 나이순으로 오름차순 정렬
users.sort((a, b) => a.age - b.age);
console.log(users);
// 출력: [{name: "Bob", age: 20}, {name: "Alice", age: 25}, {name: "Charlie", age: 30}]

주의할 점

  • sort()는 원본 배열을 수정하므로, 원본 배열을 유지해야 한다면 복사본을 만들어 정렬하기
  • 유니코드 코드 포인트 순서에 따라 기본 정렬이 이루어지므로, 숫자 배열을 정렬할 때는 반드시 비교 함수를 사용하기
// 복사본 만들어 정렬하기
// 1. slice() 메서드 사용
let numbers = [10, 2, 30];

// 배열의 복사본을 만들어서 정렬
let sortedNumbers = numbers.slice().sort((a, b) => a - b);

console.log("원본 배열:", numbers);      // 원본 배열: [10, 2, 30]
console.log("정렬된 배열:", sortedNumbers); // 정렬된 배열: [2, 10, 30]
//  2. 스프레드 연산자 사용
let numbers = [10, 2, 30];

// 배열의 복사본을 만들어서 정렬
let sortedNumbers = [...numbers].sort((a, b) => a - b);

console.log("원본 배열:", numbers);      // 원본 배열: [10, 2, 30]
console.log("정렬된 배열:", sortedNumbers); // 정렬된 배열: [2, 10, 30]
// 3. Array.from() 사용
let numbers = [10, 2, 30];

// 배열의 복사본을 만들어서 정렬
let sortedNumbers = Array.from(numbers).sort((a, b) => a - b);

console.log("원본 배열:", numbers);      // 원본 배열: [10, 2, 30]
console.log("정렬된 배열:", sortedNumbers); // 정렬된 배열: [2, 10, 30]
profile
개발블로그입니다.

0개의 댓글