본문 바로가기
자바스크립트

[JAVASCRIPT] 배열 정렬하는 방법(숫자 오름차순/내림차순, 임의정렬) - sort

by jaewooojung 2019. 8. 7.

JAVASCRIPT


sort

자바스크립트 배열 메소드 sort를 활용하여 요소를 정렬하는 방법입니다.

 

구문

arr.sort([compareFunction]);

 

원본 배열입니다.

const arr = [5, 100, 20];

 

비교함수를 전달하지 않을 때에는 숫자의 크기에 관계없이 문자열로 변환된 후 Unicode를 기준으로 정렬합니다.

const arr = [5, 100, 20];
console.log(arr); // [5, 100, 20]

arr.sort();
console.log(arr); // [100, 20, 5]

숫자가 문자열로 변환되어서 비교되기 때문에 숫자의 크기에 관계없이

1로 시작하는 1002로 시작하는 20보다 앞에 나옵니다.

 

숫자의 크기에 따라 정렬하기 위해서는 비교함수를 전달해야 합니다.

오름차순 정렬

const arr = [5, 100, 20];
console.log(arr); // [5, 100, 20]

arr.sort((a, b) => {
  if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  } else {
    return 0;
  }
});
console.log(arr); // [5, 20, 100]

 

비교함수 규칙

  • 매개변수로 두개의 값(a, b)을 전달합니다.
  • 배열내의 임의의 요소 a와 b를 비교할 때
  • 반환되는 값이 0보다 크면 a가 b보다 앞에 옵니다.
  • 반환되는 값이 0보다 작으면 b가 a보다 앞에 옵니다.
  • 반환되는 값이 0이면 순위를 변경하지 않습니다.

 

다음과 같이 줄여서 쓸 수 있습니다.

const arr = [5, 100, 20];
console.log(arr); // [5, 100, 20]

arr.sort((a, b) => a - b);
console.log(arr); // [5, 20, 100]

 

내림차순 정렬

a와 b의 위치만 바꿔줍니다.

const arr = [5, 100, 20];
console.log(arr); // [5, 100, 20]

arr.sort((a, b) => b - a);
console.log(arr); // [100, 20, 5]

 

 

응용

10으로 나눈 나머지를 기준으로 오름차순 정렬합니다.

const arr = [55, 19, 31];
console.log(arr); // [55, 19, 31]

arr.sort((a, b) => (a % 10) - (b % 10));
console.log(arr); // [31, 55, 19]

 

각 문자열의 길이를 기준으로 오름차순 정렬합니다.

const arr = ["strawberry", "apple", "orange"];
console.log(arr); // ["strawberry", "apple", "orange"]

arr.sort((a, b) => a.length - b.length);
console.log(arr); // ["apple", "orange", "strawberry"]

MDN document - Array.prototype.sort()

 

Array.prototype.sort() - JavaScript | MDN

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

 



        
답변을 생성하고 있어요.