algorithm: sort() 메소드

GAMJAJeon·2024년 2월 5일

알고리즘

목록 보기
1/4

배열의 sort() 함수

arr.sort([compareFunction])

compareFunction이란?

정렬 순서를 정의하는 함수로
이 값이 생략되면, 배열의 element들은 문자열로 변환되어, 유니코드 값 순서대로 정렬된다.

숫자 배열 정렬

이 함수는 배열에 있는 element 두 개를 파라미터로 입력 받아 계산하여

  • 첫 번째 인자가 두 번째 인자보다 작으면 음수를 반환(
  • 첫 번째 인자가 두 번째 인자보다 크면 양수를 반환
  • 첫 번째 인자가 두 번째 인자와 같으면 0을 반환

하게된다 따라서 이를 이용해 숫자 배열을 오름차순 내림차순 등으로 정렬할 수 있게 된다.

오름차순

[-3, 2, 0, 1, 3, -2, -1].sort((a, b) => a - b);
// [-3, -2, -1, 0, 1,  2,  3]

내림차순

[-3, 2, 0, 1, 3, -2, -1].sort((a, b) => b - a);
// [3, 2, 1, 0, -1, -2, -3]

객체 배열 정렬

복잡한 객체 배열을 정렬할 수도 있다.

countries.sort((a, b) => b.no - a.no);
/**
[
  { no: 5, code: "CN", name: "China" },
  { no: 4, code: "GB", name: "United Kingdom" },
  { no: 3, code: "US", name: "United States" },
  { no: 2, code: "CA", name: "Canada" },
  { no: 1, code: "KR", name: "Korea" },
]
*/

다중 기준 정렬

좀 더 큰 데이터 세트를 다룰 때는 하나의 ㅣ준이 아닌 우선 순위에 따라 여러 기준으로 배열을 정렬해야할 때가 있는데 그럴 때 사용하게 된다.

users.sort((a, b) => {
  if (a.gender === b.gender) {
    return a.age - b.age;
  } else {
    return b.gender.localeCompare(a.gender);
  }
});
/**
[
  {
    mail: "wwagner33@gmail.com",
    name: "Michael Jenkins",
    gender: "M",
    age: 51,
  },
  {
    mail: "gregorythomas@gmail.com",
    name: "Brett Holland",
    gender: "M",
    age: 73,
  },
  {
    mail: "hintc12@hotmail.com",
    name: "Madison Martinez",
    gender: "F",
    age: 29,
  },
  {
    mail: "daniel7900@gmail.com",
    name: "Karen Rodriguez",
    gender: "F",
    age: 32,
  },
  {
    mail: "ujacksonxejyen@gmail.com",
    name: "Amber Rhodes",
    gender: "F",
    age: 42,
  },
]
 */

배열의 toSorted() 함수

sort() 함수로 정렬을 할 때 원본 배열을 거드리지 않아야 하는 경우에는 반드시 배열을 먼저 복제한 후에 배열 사본을 상대로 정렬을 해야한다.

const nums = [3, 1, 2];
const sortedNums = [...nums].sort();
console.log({ nums, sortedNums });

원래는 위와같이 배열을 직접 복제한 뒤에 사용해야 했지만 toSorted()함수가 나온 뒤로는 같은 과정을 좀 더 편리하게 거칠수 있게 되었다.

const nums = [3, 1, 2];
const sortedNums = nums.toSorted();
console.log({ nums, sortedNums });

참고 블로그

0개의 댓글