sort()는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환한다. (기존 배열을 바꾼다)
기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.
만약, [1, 2, 10, 3]이라는 배열이 있다면, [1, 2, 3, 10]으로 반환해줄 것 같지만 [1, 10, 2, 3]으로 반환해준다.
그렇기 때문에 sort()의 괄호안에 함수를 넣어줘야한다.
구문 : 배열.sort((a, b) => a -b)
아래는 compareFunction를 넣지 않은 코드
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]
const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]
아래는 compareFunction를 넣은 코드
let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // a, b 위치에 따라 내림차순 오름차순이 바뀐다.
console.log(numbers); // [1, 2, 3, 4, 5]
let numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => b - a); // a, b 위치에 따라 내림차순 오름차순이 바뀐다.
console.log(numbers); // [5, 4, 3, 2, 1]
배열의 각 요소들을 a, b에 넣어 계산한 값이 음수면 a가 앞, b가 뒤로 오도록 정렬하고,
배열의 각 요소들을 a, b에 넣어 계산한 값이 양수면 b가 앞, a가 뒤로 오도록 한다.
배열의 각 요소들을 a, b에 넣어 계산한 값이 0이라면 a와 b의 순서를 변경하지 않는다.
완료될 때까지 반복한다.
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 13 },
{ name: 'Zeros', value: 37 }
];
// value 기준으로 정렬
items.sort(function (a, b) {
if (a.value > b.value) {
return 1;
}
if (a.value < b.value) {
return -1;
}
// a must be equal to b
return 0;
});
// name 기준으로 정렬
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// 이름이 같을 경우
return 0;
});
mdn의 예시인데, key value로 이루어져 있을 경우 기준을 정해서 정렬할 수도 있다.