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

sort() 함수는 기본적으로 원소들을 문자열로 만든 후에, UTF-16 코드 유닛 값을 기준으로 순서를 정렬한다.
문자열로 바꾼 뒤에 정렬이 이루어지기 때문에 숫자 정렬에 적합하지 않아서 compare function 을 작성해준다.
var arr = [1,30,4,21,100,1000];
var arr2 = arr.sort();
arr2;
// [1,100,1000,21,30,4];
arr.sort([compareFunction])
[Compare Function]은 콜백 함수로 두 개의 매개변수 (param1,param2) 를 가진다.
매개변수를 연산했을 때의 값은 1,0,-1 세 개중 하나이고 이를 이용해 오름차순 또는 내림차순으로 배열을 정렬할 수 있다.
var arr = [1,30,4,21,100,1000];
arr.sort((a,b) => b - a);
콜백함수가 어떤 값을 반환하는지를 잘 살펴보아야하는데 앞서 설명했듯이, 양수와 음수 그리고 0의 세 가지 케이스가 존재한다.
문자열이나 숫자를 비교할 때 결과값으로 -1,0,1을 리턴하도록 해서 정렬하는데에 활용하는 원리!
sort( )함수의 원리도 모르고 ;; 냅다 for문부터 질러버리고 작성했던 첫 풀이와 이후의 풀이에서도 for문 안에 sort함수를 작성했는데 매개변수로 받는 a,b가 배열 내의 값이고 이를 비교해서 -1일 때 앞으로 보내주는 원리로 작성하면 되는 것이기 때문에 ... for를 이용해.. index를 돌릴 필요가 없다... 😅 (민망)
function solution(strings, n) {
var answer = strings.sort((a,b) => {
var str = a[n];
var str2 = b[n];
if (str < str2) {
return -1;
}
if (str > str2) {
return 1;
}
if (str === str2){
// a[n]과 b[n]이 같을 때는 a와 b의 문자열을 비교해준다
if(a > b) return 1;
if(a < b) return -1;
return 0;
}
return 0;
});
return answer;
}
다른 사람의 풀이 중 사용해보려다가 못했던 localeCompare 를 활용해 아주 간단하게 작성한 코드를 첨부한다.
function solution(strings, n) {
// strings 배열
// n 번째 문자열 비교
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
localeCompare를 사용하려고 시도했을 때 ... 이제와서 생각해보니 그냥 전체 문자열을 통으로 비교해주면 되는 것이었는데... 나는 a[n]+1, b[n]+1을 안에 집어넣고 ;;; 쌩쇼를 했다...
그래서 정리해보는 localeCompare( )!!!!
var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort((a, b) => a.localeCompare(b));
// ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']