Array

Array 객체의 정렬

from. Modern javascript & jQuery

Array 객체의 sort() 메서드의 정렬 방법에 변화를 주고 싶을 때는 sort() 메서드의 매개 변수로 함수를 넣어 줍니다.
sort() 메서드의 매개 변수로 들어가는 함수는 기본적으로 다음과 같이 매개변수 두 개를 받을 수 있어야 합니다.

브라우저는 이 함수를 이용해 퀵소트 또는 머지소트 같은 정렬을 진행합니다. 간단하게 말하면 정렬 기준은 매개 변수로 입력한 함수가 리턴하는 숫자의 부호에 정렬 방식이 결정됩니다. 대부분 배열의 자료를 정렬하는 경우는 숫자를 정렬하는 경우가 많으므로 다음과 같은 형태의 함수를 많이 사용합니다.

								array.sort(function (left, right) {});}
						

오름차순 정렬

							function (left, right) {
								return left - right;
							}
						

내림차순 정렬

							function (left, right) {
									return right-left;
							}
						

정렬 예제1 - 함수리터럴을 sort() 메서드의 변수로 넘긴 경우

							// 변수를 선언하고 정렬합니다.
							var array = [52, 273, 103, 32];
							array.sort(function (left, right) {
									return left - right;
							});

							// 출력
							alert(array); // 32, 52, 103, 273
						

정렬 예제2 - 함수참조를 sort()메서드의 변수로 넘긴 경우

							// 변수를 선언하고 정렬합니다.
							var array = [52, 273, 103, 32];
							array.sort(function (left, right) {
									return left - right;
							});

							// 오른차순 정렬
							function ascendingOrder (left, right) {
									return left - right;
							}

							// 내림차순 정렬
							function descendingOrder (left, right) {
									return right - left;
							}
							// 출력
							array.sort(ascendingOrder);
							alert(array);
							array.sort(descendingOrder);
							alert(array);
						

이하 내용추가

From. 프론트엔드 개발자를 위한 자바스크립트 - 자카스

정렬 메서드

배열 순서를 집접 조작하는 메서드는 reverse()와 sort() 두 가지입니다. 이름에서 예상할 수 있듯 reverse() 메서드는 단순히 벼열에 저장된 데이터 순서를 뒤집습니다. 예를 들어 다음 코드를 보십시오.

						var values = [1, 2, 3, 4, 5];
						values.reverse();
						alert(values);	// 5,4,3,2,1
						

values 배열의 처음 순서는 1, 2, 3, 4, 5 입니다. reverse()를 호출하면 5, 4, 3, 2, 1로 순서가 뒤집힙니다. 이 메서드는 매우 단순하지만 유연성은 없습니다. 배열 데이터를 마음대로 조작하려면 sort() 메서드가 필요합니다.

sort() 메서드는 기본적으로 데이터를 정순, 즉 가장 작은 값이 첫 번째에 오고 가장 큰 값이 마지막에 오도록 정렬합니다. sort() 메서드는 이를 위해 이면에서 String() 함수를 호출해 데이터를 문자열로 변화한 후 이를 비교하여 순서를 판단합니다. 이는 잘 만들어졌다고 보기 어려운데, 다음과 같이 숫자만으로 이루어진 배열에서도 똑같이 작동하여 상식적이지 않은 결과를 내기 때문입니다.

						var values = [0, 1, 5, 10, 15];
						values.sort();
						alert(values);	// 0, 1, 10, 15, 5