배열의 순서 정렬(sort)
sort
- 배열의 순서를 문자열의 유니코드 코드 포인트를 따라 정렬하는 메서드이다.
- 문법: array.sort([compareFunction])
- compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 오름차순으로 정렬된다.
- compareFunction(a, b)를 통해 반환되는 값이 음수인 경우 a를 b보다 낮은 숫자로 인식하여 a를 앞으로 배치한다. 반대로 양수인 경우는 a를 b보다 큰 숫자로 인식하여 b를 앞에 배치한다. 반환되는 값이 0일 경우는 a와 b를 같은 값으로 인식하여 그대로 둔다.
- 문자에서 대소문자를 구분하여 정렬된다. (대문자가 오름차순에서 우선이다.)
- 숫자 또한 문자로 인식하기 때문에 숫자의 첫 번째 자리를 기준으로 정렬된다. (음수일 경우 음수 오름차순에서 우선되고, 음수의 첫 번째 자리를 기준으로 정렬된다.)
- 원본 배열을 정렬하며 그 참조를 반환한다.
var strArr1 = ["b", "e", "a", "d"];
strArr1.sort(); // ["a", "b", "c", "d"]
console.log(strArr1); // ["a", "b", "c", "d"]
var strArr2 = ["a", "A", "B", "b"]
strArr2.sort(); // ["A", "B", "a", "b"]
console.log(strArr2); // ["A", "B", "a", "b"]
var numArr1 = [2, 10, 5, 2];
numArr1.sort(); // [10, 2, 2, 5]
console.log(numArr1); // [10, 2, 2, 5]
var numArr2 = [200, 10, 3, -3, -300, -100];
numArr2.sort(); // [-100, -3, -300, 10, 200, 3]
console.log(numArr2); // [-100, -3, -300, 10, 200, 3]
원하는대로 정렬한 결과를 얻기 위해서는 fuction을 넣어주어야한다.
// 숫자 오름차순으로 정렬
numArr2.sort(function(a, b) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
}); // [-300, -100, -3, 3, 10, 200]
// 위의 원리를 사용해 a - b의 값을 반환하여 음수인지 양수인지 0인지에 따라 정렬할 수 있다.
numArr2.sort(function(a, b) {
return a - b;
}); // [-300, -100, -3, 3, 10, 200]
// ES2015 사용
numArr2.sort((a, b) => a - b); // [-300, -100, -3, 3, 10, 200]
// 숫자 내림차순으로 정렬
numArr2.sort(function(a, b) {
if (a > b) return -1;
if (a < b) return 1;
return 0;
}); // [200, 10, 3, -3, -100, -300]
numArr2.sort(function(a, b) {
return b - a;
}); // [200, 10, 3, -3, -100, -300]
numArr2.sort((a, b) => b - a); // [200, 10, 3, -3, -100, -300]
// 문자 오름차순으로 정렬
strNum.sort(function(a, b) {
var nameA = a.toUpperCase(); // 대소문자 구분을 없애 정렬
var nameB = b.toUpperCase(); // 대소문자 구분을 없애 정렬
if (nameA > nameB) return 1;
if (nameA < nameB) return -1;
return 0;
});