Javascript Cookbook

배열 정렬하기

문제

배열을 정렬하고 싶다.

해결

Array 객체의 sort() 메서드를 사용하면 된다.

var fruitArray = ['strawberry', 'apple', 'orange', 'banana', 'lime'];
alert(fruitArray.sort());   //apple, banna, lime, orange, strawberr 반환

설명

Array 객체의 sort 메서드는 비교 함수를 인수로 제공하지 않으면 알파벳순으로 배열 원소를 정렬한다. 정렬을 하기 위해 정렬 전에 모든 자료형을 동등한 값의 문자열로 변환한다.

var numberArray = [4, 13, 2, 31, 5];
alert(numberArray.sort());  //13, 2, 31, 4, 5 반환

이 예제에서 배열 원소는 숫자지만, 숫자 크기순이 아닌 사전순으로 정렬된다.

숫자 크기순으로 정렬하려면 사용자 정의 정렬 함수를 사용한다.

function compareNumbers(a,b){
    return a - b;
}
var numberArray = [13,2,31,4,5];
alert(numberArray.sort(compareNumbers));    //2, 4, 5, 13, 31 출력

compareNumbers 함수의 반환값이 0보다 작으면 두번째 인수(b)의 정렬 인덱스가 첫번째 인수(a)보다 높아진다. 반환값이 0보다 크면 첫번째 인수의 정렬 인덱스가 두번째 인수보다 높아진다. 만약 반환값이 정확히 0이라면 두 원소의 정렬 인덱스는 변하지 않는다.

숫자로 변환할 수 있는 문자열을 포함한 배열 원소에도 compareNumbers 정렬 함수를 그대로 사용할 수 있다. 숫자 변환이 자동으로 일어나기 때문이다.

numberArray = ["34", "4", "5"];
alert(numberArray.sort(compareNumbers));    //4, 5, 34 출력

sort 메서드는 원소를 오름차순으로 정렬한다. 정렬순서를 바꾸고 싶다면 sort 메서드를 사용해서 원소를 정렬한 후 reverse 메서드를 사용해서 배열 원소의 순서를 뒤집으면 된다.

var numberArray = [4, 5, 1, 3, 4];
numberArray.sort();  
numberArray.reverse();  //5,4,3,2,1 반환