배열을 정렬하고 싶다.
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 반환