View
sort는 배열의 요소를 정렬하여 반환한다.
즉, 원본 배열 자체가 바뀌므로 주의하여 사용한다. (복사본이 만들어지는 것이 아님)
const owners = ['Jonas', 'Zach', 'Adam', 'Martha'];
console.log(owners.sort()); // ["Adam", "Jonas", "Martha", "Zach"]
console.log(owners); // ["Adam", "Jonas", "Martha", "Zach"]
기본 정렬 순서는 문자열의 유니코드 포인트를 따른다.
요소를 문자열로 변환하고 정렬하기 때문에
숫자라고 하더라도 문자로 생각하여 인식한다(함수가 없는경우)
const movements = [200, 450, -400, 3000, -650, -130, 70, 1300];
console.log(movements.sort()); // [-130, -400, -650, 1300, 200, 3000, 450, 70]
첫글자만 따로 보면, -1, -4, -6, 1, 2, 3, 4, 7 인 결과이다.
숫자의 경우
배열을 순환하며 두 요소를 비교하게 되는데(a,b라고 가정한다),
return 되는 숫자가 0보다 큰 경우에는 a, b 순서가 b, a로 바뀐다 (return 1)
return 되는 숫자가 0보다 작은 경우에는 a, b 순서가 그대로 유지된다. (return -1)
오름차순 정렬
arr.sort(function(a,b) {
if (a>b) return 1;
if (a<b) return -1;
});
혹은
arr.sort((a, b)=> {
if (a>b) return 1;
if (a<b) return -1;
});
ES2015(ES6)에서 아래와 같이 화살표함수로 간략하게 표현할 수 있다.
arr.sort((a,b)=>a-b);
a-b가 되는 이유
a > b 라고 가정하면 a-b는 무조건 0보다 큰 수가 된다.
a < b 인 경우에는 a-b의 결과는 0보다 작은 수가 된다.
따라서 위와 같이 표현 할 수 있다.
a-b = 0인 경우에는
순서가 변하지 않고 그대로 유지된다.
내림차순 정렬
arr.sort(function(a,b) {
if(a>b) return -1;
if(a<b) return 1;
});
ES6
arr.sort((a,b)=>b-a);
string과 number가 섞여있는 array에서는 사용하지 않는다.