sort() 메서드는 배열의 요소를 정렬한다.

※  sort()는 원래 배열을 덮어쓴다.

 

정렬 순서는 알파벳 또는 숫자가 될 수 있으며 오름차순 또는 내림차순이 될 수 있다.

기본적으로 sort() 메서드는 값을 알파벳 및 오름차순으로 문자열로 정렬한다.

const days = ['Mon', 'Wed', 'Fri', 'Sun'];

days.sort();

console.log(days);

// ["Fri", "Mon", "Sun", "Wed"] 출력

 

 

그러나 숫자를 문자열로 정렬하면 2가 1보다 크기 때문에 25가 100보다 크다.

이 때문에 sort() 메서드는 숫자를 정렬할 때 잘못된 결과를 생성한다.

const arr = [1, 3, 40, 25, 100];

arr.sort();

console.log(arr);

// [1, 100, 25, 3, 40] 출력

 

 

 

이 문제는 비교 함수를 작성하여 해결할 수 있다.

 

1. 비교 함수

  -  문자열

var strings = ['Mon', 'Wed', 'Fri', 'Sun'];

function compareStr(a, b) {
	if (a < b) {
		return -1;
	}
	if (a > b) {
		return 1;
	}
	// a == b
	return 0;
}

strings.sort(compareStr);

console.log(strings);

// ["Fri", "Mon", "Sun", "Wed"] 출력

 

 

  -  숫자

var numbers = [1, 3, 40, 25, 100];

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

numbers.sort(compareNum);

console.log(numbers);

// [1, 3, 25, 40, 100] 출력

 

 

2. 인라인 비교 함수

var numbers = [1, 3, 40, 25, 100];

numbers.sort(function(a, b) {
	return a - b;
});

console.log(numbers);

// [1, 3, 25, 40, 100] 출력

 

 

 

 

3. 화살표 함수

let numbers = [1, 3, 40, 25, 100];

numbers.sort((a, b) => a - b);

console.log(numbers);

// [1, 3, 25, 40, 100] 출력

 

 

 

오름차순, 내림차순

※  문자열 비교함수

  -  오름차순 정렬은 a < b일 때 -1 리턴, a > b일 때 1 리턴

  -  내림차순 정렬은 a < b일 때 1 리턴, a > b일 때 -1 리턴

 

※ 숫자 비교함수

  -  오름차순 정렬은 a - b

  -  내림차순 정렬은 b - a

 

(혹은 오름차순으로 정렬된 배열에 reverse() 메서드 사용)

 

 

+ Recent posts