[JavaScript] 배열 정렬하기 (.sort())

arr.sort([compareFunction])

compareFunction : 두 개의 파라미터를 비교하는 compare 함수의 반환값에 따라 정렬 순서(오름차순, 내림차순 등)를 정의.

 

 

compareFunction에 아무것도 넣지 않으면 유니코드 순서로 정렬됨.

//ex1
var arrNums = [4, 2, 7, 1];
arrNums.sort();

console.log(arrNums); //[1, 2, 4, 7]

//ex2
//숫자는 문자열로 변환되어 유니코드순으로 2, 20, 5 의 순서가 됨.
var arrNums2 = [2, 5, 20];
arrNums2.sort();

console.log(arrNums2); //[2, 20, 5]

//ex3
//대문자가 소문자보다 먼저 옴.
var arrChar = ['apple', 'Banana', 'banana'];
arrChar.sort();

console.log(arrChar); //['Banana', 'apple', 'banana']

 

 

compareFunction에 a, b 를 입력받았을 때

compare 함수의 리턴값이

  • 음수면 a(첫 번째 입력값)가 b(두 번째 입력값) 앞으로 옴.
  • 0이면 순서를 변경하지 않음.
  • 양수면 b(두 번째 입력값)가 a(첫 번째 입력값) 앞으로 옴.

 

1. 사용방법 : 함수식 사용, 함수 사용

//ex1 함수식
var arrNums2 = [2, 5, 20];
arrNums2.sort(function(a, b){
	return a - b;
});

console.log(arrNums2); //[2, 5, 20]

//ex2 함수
var arrNum2 = [2, 5, 20];

function compareNums(a, b){
	return a - b;
};

console.log(arrNums2.sort(compareNums)); //[2, 5, 20]

 

2. 오름차순 예시

//ex1 오름차순1
var arrNums2 = [2, 5, 20];
arrNums2.sort(function(a, b){
    if(a > b){return 1} 
    else if(a == b){return 0}
    else if(b > a){return -1};
});

console.log(arrNums2); //[2, 5, 20]


//ex2 오름차순2
var arrNums2 = [2, 5, 20];
arrNums2.sort(function(a, b){
	return a - b; //입력된 값의 크기 차를 이용([5, 2]면 3으로 양수, [2, 5]면 -3으로 음수)
    //return b - a; //내림차순
});

console.log(arrNums2); //[2, 5, 20]

 

3. 대소문자 구분하지 않기

대소문자 구분하지 않고 정렬하기 위해서는 toUpperCase()를 사용해서 새로운 변수에 대문자로 변경한 a, b를 담고 그 새로운 변수를 비교해서 값을 리턴하면 됨.

var arrChar = ['apple', 'banana', 'orange', 'Banana'];
arrChar.sort(function (a, b){
    var upA = a.toUpperCase();
    var upB = b.toUpperCase();
    
    if(upA < upB){return -1}
    else if(upA == upB){return 0}
    else if(upA > upB){return 1};
});

console.log(arrChar); // ['apple', 'banana', 'Banana', 'orange']

 

 

참고자료:

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

https://hianna.tistory.com/409