본문 바로가기
알고리즘 스터디/자바스크립트 문법정리

sort() 함수 - 자바스크립트 문자열 정렬, 숫자 정렬 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 16.
728x90

sort함수 : 배열 내 문자열 정렬함수, 원래 배열의 값을 바꿔버린다는 특징이 있다.

 

배열 내 문자열 오름차순

var s = ['a', 'e', 'd', 'c', 'b']; 
s.sort(); //s = ['a', 'b', 'c', 'd', 'e'];

 

배열 내 문자열 내림차순

var s = ['a', 'e', 'd', 'c', 'b']; 
s.sort().reverse(); //s = ['e', 'd', 'c', 'b', 'a'];

sort함수로 문자열을 오름차순으로 정렬한 후, reverse() 함수를 사용하여 다시 거꾸로 뒤집으면 내림차순이 된다.

 

728x90

배열 내 숫자 오름차순

 

var num = [1, 5, 3, 2, 4]; 
num.sort((a, b) => a - b); //num = [1, 2, 3, 4, 5];

 

배열 내 숫자 내림차순

 

var num = [1, 5, 3, 2, 4]; 
num.sort((a, b) => b - a); //num = [5, 4, 3, 2, 1];

주의할 것


기본적으로 sort()함수 자체는 문자열을 기준으로 정렬하기 때문에, 아래와 같이 숫자 배열인 경우에는, a-b 혹은 b-a라는 표시를 꼭 해주어야한다.

 

문자열을 기준으로 정렬된다는 것은 아래의 코드를 참고하면 된다.

숫자를 사전식 정렬처럼, 앞자리의 숫자만을 기준으로 정렬하기 때문에, 꼭 위와 같이 숫자 배열에선 a-b 혹은 b-a를 지정을 해주어야한다.

var num = [1, 200, 30, 500, 40]; 
num.sort(); //num = [1, 200, 30, 40, 500];

 

sort함수 내의 함수의 반환 값은 숫자!

 

또 한가지 주의해야할 점은, sort함수 자체는 배열을 반환하지만, 그 안에 들어가는 function자체의 반환 값은 숫자라는 것이다.

이는 sort함수의 동작 원리를 이해하는 것이 필요로 하는데, a - b를 사용하면 숫자정렬이 되는 이유이기도 하다.

우선, 정렬 자체의 동작 원리는 a - b로 두 값의 차이로 대소 비교를 하는 것인데, 만약 a가 더 크다면 양수가, a가 더 작다면 음수가 나오게 될 것이다. (오름차순 기준)

그럼, 양수가 나온 경우엔 a와 b의 자리를 바꾸어야하므로, return 값이 양수라면 두 값의 위치를 바꾸고, 0혹은 음수라면 그대로 놔두게 된다.

 

sort함수 내 문자열 비교 방법

 

이러한 방식을 활용하자면, sort함수 내의 함수에서도 문자열 비교가 가능한데, 문자열끼리의 대소 비교를 이용하는 것이다.

위와 같이, 문자열을 대소 비교하면 사전식 정렬 기준으로 문자열을 비교하는데, abcd가 더 앞에 나오는 문자열이므로 더 작은 값으로 취급하여, 대소비교가 가능한 것이다.

 

그러므로, sort(function(a, b){####### }) ####이 부분에서 문자열을 정렬하려고 한다면, a > b ? 1 : -1 과 같은 삼항연산자를 사용하여 리턴하도록 해주면 된다. a가 b보다 크다면, 양수 1을 반환해서 a, b의 위치를 바꾸고, 음수라면 바꾸지 않아도 된다.

 

헷갈리지 말 것 : 논리값은 0만 false이고 0 이외의 음/양수 값은 모두 true! 위에서 a가 0혹은 음수면 바뀐다는 것 = true로 착각하지 말 것! 컴퓨터는 꺼져있는 것(0)은 false, 그 외는 켜져있는 것으로 true이다!


관련 프로그래머스 코딩연습문제 :

https://leylaoriduck.tistory.com/452

 

[프로그래머스 스킬체크 레벨 1] 문자열 내 마음대로 정렬하기 풀이 및 설명 - 자바스크립트[JavaSc

https://programmers.co.kr/learn/courses/30/lessons/12915 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으..

leylaoriduck.tistory.com

 

728x90

댓글