JS/Javascript

[Javascript] 자바스크립트 배열 정렬 함수 : Array.prototype.sort()

emayom 2021. 7. 4. 02:05

 

 

[Javascript] 프로그래머스 : K번째수

[Javascript] 프로그래머스 Level1 _ K번째수 👇🏻 Link_Click 👇🏻 시행착오 ( + 코드를 작성하면서든 생각들.) 1. 일단 for반복문으로 구성하면서 문제를 파악해봤다. commands 의 내부 배열이 1개 이상이

emayom.tistory.com

프로그래머스의 👆🏻문제를 풀면서 sort()에 대해 몰랐던 사실을 알게되어 따로 정리하며 포스팅하려고 한다.

자바스크립트는 알면 알 수록 재미있는 것 같다 !


Array.prototype.sort()

Syntax arr.sort([compareFunction])  
Parameter compareFunction (Optional) 정렬 순서를 정의하는 함수
Return value Array 정렬한 배열. 원 배열이 정렬 (복사본 ❌ )

 

위의 코테 포스팅에서도 적었지만,

sort() 함수는 문자열을 유니코드 코드 포인트(고유한 숫자 값)를 기준으로 정렬 해주는 함수이다.

그냥 배열 정렬에 쓰는거구나하고 sort()로 숫자를 정렬했는데 얘가 왜 여기 있지? 싶었던 순간이 있었다.

그때는 몰랐지 ....!!

 

예제를 보자.

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4] 

그냥 머릿 속에서 array1을 정렬한다면  [1, 4, 21, 30, 100000] 이라고 생각했을 것이다.

하지만 주석 expected output을 보면 [1, 4, 21, 30, 100000]이 아닌 [1, 100000, 21, 30, 4]가 리턴된다.

 

유니코드 코드포인트

1 100000 21 30 4
U+0031 U+0031 [U+0030U : 5번 반복] U+0032U+0031 U+0033U+0030 U+0034

배열의 숫자들을 유니코드 코드 포인트로 바꿔봤다.

보이는 것과 같이 U+0031 > U+0032 > U+0033 > U+0034와 같이 나란히 오름차순으로 정렬된 것을 확인할 수 있다.

 

숫자를 숫자가 아닌 문자 하나씩의 조합으로 보기 때문에

abcdefg와 같이 가장 배열에서 가장 첫번째 문자를 기준으로 정렬을 한뒤,

첫번째 문자가 같은 것들은 두번째 문자를 기준으로 다시 정렬을 하는 방식으로 차곡차곡 정렬을 한다.

 

그래서 숫자를 정렬할 때는 매개변수로 정렬할 기준 함수를 정의해주는 것이 필요하다.

 

 

Array.prototype.sort() - JavaScript | MDN

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

developer.mozilla.org

 

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***