Sort
정의
- 배열의 프로토타입으로
.sort()
의 앞의 값이 배열 일때 사용가능하다. - 비교 함수를 쓰지 않아 조건이 없을 경우 배열속 요소들을 오름차순으로 정렬한다.
- 대문자와 소문자를 구별하여 정렬한다.
- 숫자를 정렬하려고 할 경우에는 일바적으로 생각하는 적은 수에서 큰 수로 정렬되지 않는다.
- 기본적으로 배열의 메소드지만 객체도 정렬할 수 있다.
기본 정렬
-
배열에
.sort()
를 붙인다.- 문자
const stringArr = [ 'pineapple', 'grape', 'banana', 'kiwi', 'apple' ]; stringArr.sort(); // abc 순으로 정렬 [ 'apple', 'banana', 'grape', 'kiwi', 'pineapple' ]
- 숫자
const numberArr = [ 7, 4, 8, 2, 1 ]; numberArr.sort(); // 정렬 값 = [ 1, 2, 4, 7, 8 ]
- 숫자의 경우에는 우리가 생각하는 것 처럼 정렬이 되지 않을 수 있다.
const numberArr = [ 200, 1300, 3, 10, -1, -55 ]; numberArr.sort(); //[ -1, -55, 10, 1300, 200, 3 ]
- 문자
비교 함수
.sort()
의 괄호 안에 비교함수를 넣어서 원하는 방향으로 정렬한다.-
비교함수를 사용하여 위에 숫자가 제대로 정렬되지 않는 문제도 해결할 수 있다.
- 오름차순
const numberArr = [ 200, 1300, 3, 10, -1, -55 ]; numberArr.sort((a, b) => { if (a < b) return -1; if (a > b) return 1; return 0; }); // 다시 정렬된 값 [ -55, -1, 3, 10, 200, 1300 ]
- 내림차순
const numberArr = [ 200, 1300, 3, 10, -1, -55 ]; numberArr.sort((a, b) => { if (a < b) return 1; if (a > b) return -1; return 0; }); // 반대로 정렬됨 [ 1300, 200, 10, 3, -1, -55 ]
- 오름차순
비교 함수 축약
- 오름차순과 내림차순 축약
const numberArr = [ 200, 1300, 3, 10, -1, -55 ]; const ascending = numberArr.sort((a, b) => { return a - b; // 오름차순 }); const descending = numberArr.sort((a, b) => { return b - a; // 내림차순 }) console.log(ascending); // 정렬된 값 [ -55, -1, 3, 10, 200, 1300 ] console.log(descending); // 정렬된 값 [ 1300, 200, 10, 3, -1, -55 ]
- 문자로 이루어진 배열에는 해당되지 않는 모양이다.
객체 정렬
-
객체값을 가진 배열도 정렬할 수 있다.
- value값으로 정렬하기
const fruits = [ {id: 1, name: 'strawberry'}, {id: 2, name: 'green apple'}, {id: 3, name: 'Mango'}, {id: 4, name: 'apple'}, ]; // value 값 name으로 정렬 fruits.sort((a, b) => { // 문자열은 대문자 소문자를 구분하기 때문에 맞춰서 정렬해줘야한다. a = a.name.toUpperCase() b = b.name.toUpperCase() if (a < b) return -1; if (a > b) return 1; return 0; })
- 문자열로 정렬할 경우 대문자 소문자를 구분하기때문에 모두 대문자로 변형해주기 위해
.toUpperCase()
를 사용해주었다.
- value값으로 정렬하기