[JS] sort()

KJA·2022년 7월 23일
0

sort 메서드는 인자 값(compareFunction)을 생략하게 되면 유니코드 값에 따라 오름차순 정렬됩니다.

1. 문자열 배열 정렬

오름차순

const arr = ['kiwi', 'apple', 'melon', 'grape', 'banana'];

arr.sort();
console.log(arr); // ['apple', 'banana', 'grape', 'kiwi', 'melon']

또는

const arr = ['kiwi', 'apple', 'melon', 'grape', 'banana'];

arr.sort((a, b) => a.localeCompare(b));

내림차순

비교하는 두개 문자열의 크기가 같으면 0, 크면 양수, 작으면 음수를 리턴하도록 구현하면 내림차순으로 정렬 됩니다.

const arr = ['kiwi', 'apple', 'melon', 'grape', 'banana'];

arr.sort((a, b) => {
    if (a > b) return -1;
    else if (b > a) return 1;
    else return 0;
  });
console.log(arr); // (5) ['melon', 'kiwi', 'grape', 'banana', 'apple']

또는

const arr = ['kiwi', 'apple', 'melon', 'grape', 'banana'];

arr.sort((a, b) => b.localeCompare(a));

2. 숫자 배열 정렬

숫자 배열에 sort() 를 사용하면 숫자 크기대로 정렬되지 않습니다.

const arr = [22, 11, 2, 9, 1, 5];

arr.sort();
console.log(arr); // (6) [1, 11, 2, 22, 5, 9]

오름차순

sort()에 두 개의 숫자를 비교하는 함수를 구현하여 인자로 전달해야 합니다. 아래와 같이 a - b의 값을 리턴하도록 구현하면 오름차순이 됩니다. a가 크면 양수, b가 크면 음수, 같으면 0이 리턴됩니다.

const arr = [22, 11, 2, 9, 1, 5];

arr.sort((a, b) => a - b);
console.log(arr); // (6) [1, 2, 5, 9, 11, 22]

내림차순

const arr = [22, 11, 2, 9, 1, 5];

arr.sort((a, b) => b - a);
console.log(arr); // (6) [22, 11, 9, 5, 2, 1]

3. 객체 배열 비교

오름차순

const arr = [
    {id: 22, name: 'kiwi' },
    {id: 11, name: 'apple' },
    {id: 2, name: 'melon' },
    {id: 9, name: 'grape' }
  ];

arr.sort((a, b) => a.id - b.id); // (*)
console.log(arr);

/* 결과
[
  { id: 2, name: 'melon' },
  { id: 9, name: 'grape' },
  { id: 11, name: 'apple' },
  { id: 22, name: 'kiwi' }
]
*/

내림차순

const arr = [
    {id: 22, name: 'kiwi' },
    {id: 11, name: 'apple' },
    {id: 2, name: 'melon' },
    {id: 9, name: 'grape' }
  ];

arr.sort((a, b) => b.id - a.id); // (*)
console.log(arr);

/* 결과
[
  { id: 22, name: 'kiwi' },
  { id: 11, name: 'apple' },
  { id: 9, name: 'grape' },
  { id: 2, name: 'melon' },
]
*/

4. sort().reverse() - 내림차순

함수를 구현하기 귀찮으면 sort()로 오름차수으로 정렬한 뒤, reverse()를 호출하여 배열의 순서를 변경하여 내림차순과 동일한 결과를 만들도록 구현할 수 있습니다.

const arr = ['kiwi', 'apple', 'melon', 'grape', 'banana'];

arr.sort().reverse();
console.log(arr); // (5) ['melon', 'kiwi', 'grape', 'banana', 'apple']

5. 원본 배열을 변경하지 않고 정렬

sort는 원본 배열을 변경한다. 원본 배열을 변경하지 않고 정렬하려면 slice()로 배열을 복사 후 sort()를 사용한다.

arr.slice().sort((a, b) => a - b);

https://developer-talk.tistory.com/73

0개의 댓글