DEV/Modern JavaScript

8-3. 배열과 객체 메서드 Part 2(sort)

develop-ch94 2026. 6. 23. 15:29
배열 정렬 메서드

(1) Sort 기본

문자열 정렬:

const fruits = ['banana', 'apple', 'cherry', 'date'];

fruits.sort();
console.log(fruits); // ['apple', 'banana', 'cherry', 'date']

// 원본 배열이 변경됨

 

숫자 정렬(주의!):

const numbers = [10, 5, 40, 25, 1000, 1];

// 잘못된 방법
numbers.sort();
console.log(numbers); // [1, 10, 1000, 25, 40, 5]
// 문자열로 변환되어 졍렬됨

// 올바른 방법
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 5, 10, 25, 40, 1000]

(2) 정렬 함수

오름차순:

const numbers = [3, 1, 4, 1, 5, 9, 2, 6];

numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 2, 3, 4, 5, 6, 9]

 

내림차순:

const numbers = [3, 1, 4, 1, 5, 9, 2, 6];

numbers.sort((a, b) => b - a);
console.log(numbers); // [9, 6, 5, 4, 3, 2, 1, 1]

 

작동 원리:

a - b < 0 → a가 앞에 (a < b)
a - b > 0 → b가 앞에 (a > b)
a - b = 0 → 순서 유지 (a = b)

(3) 객체 배열 정렬

숫자 속성으로:

const users = [
  { name: '홍길동', age: 30 },
  { name: '김철수', age: 25 },
  { name: '이영희', age: 28 }
];

// 나이순 (오름차순)
users.sort((a, b) => a.age - b.age);
console.log(users);
// [{name: '김철수', age: 25}, ...]

// 나이순 (내림차순)
users.sort((a, b) => b.age - a.age);

 

문자열 속성으로:

const users = [
  { name: '홍길동', age: 30 },
  { name: '김철수', age: 25 },
  { name: '이영희', age: 28 }
];

// 이름순 (가나다순)
users.sort((a, b) => {
  if (a.name < b.name) return -1; // a -> b
  if (a.name > b.name) return 1; // b -> a
  return 0; // 유지
});

// 더 간단하게
users.sort((a, b) => a.name.localeCompare(b.name));

(4) 원본 보존하며 정렬

const numbers = [3, 1, 4, 1, 5, 9];

// ❌ sort는 원본 변경
const sorted1 = numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 3, 4, 5, 9] (원본 변경됨!)

// ✅ 복사 후 정렬
const numbers2 = [3, 1, 4, 1, 5, 9];
const sorted2 = [...numbers2].sort((a, b) => a - b);
console.log(numbers2); // [3, 1, 4, 1, 5, 9] (원본 유지)
console.log(sorted2);  // [1, 1, 3, 4, 5, 9]