일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- leetcode문제풀이
- react
- 자바스크립트 문제풀이
- 리액트쿼리
- lodash
- JavaScript
- 자바스크립트 문제
- 자바스크립트 알고리즘
- 프론트엔드
- Next.js13
- 자바스크립트코딩테스트
- 자바스크립트 연결리스트
- Baekjoon
- 자바스크립트
- 리액트
- NPM
- 알고리즘문제풀이
- HTML
- 프로그래머스
- next13
- JS
- 타입스크립트
- CSS
- til
- 자바스크립트 알고리즘 문제
- stack문제
- 자바스크립트 문제 풀이
- 제로베이스
- leetcode
- Next
- Today
- Total
코드노트
javascript sort 배열 정렬방법 정리 / 오름차순, 내림차순, 문자, 숫자, 객체 본문
sort 메서드는 배열의 요소를 정렬한다.
원본 배열을 직접 변경하며, 정렬된 배열을 반환한다.
숫자 정렬
let num = [ 2, 3, 5, 1, 4 ]
console.log(num); // [ 2, 3, 5, 1, 4 ]
num.sort();
console.log(num); // [ 1, 2, 3, 4, 5 ]
num.sort().reverse();
console.log(num); // [ 5, 4, 3, 2, 1 ]
sort를 통해서 정렬이 가능하다. 오름차순으로 정렬을 한다.
내림차순으로 하려면 reverse를 통해서 내림차순으로 출력할 수 있다.
let num = [2, 3, 5, 1, 4, 10, 100, 12];
console.log(num); // [1, 10, 100, 12, 2, 3, 4, 5]
만약 배열에 1~9까지의 수가 아닌 10단위 100단위... 가 들어가게되면 오름차순에서 문제가 생긴다.
sort 메서드의 기본정렬 순서는 유니코드 코드 포인트를 따르기 때문에 배열의 요소가 number타입이라고 해도
배열의 요소를 일시적으로 문자열로 변환한 후 유니코드 코드 포인틀의 순서를 기준으로 정렬한다.
오름차순 정렬
이를 해결하기 위해서는 sort 메서드에 정렬 순서를 정의하는 비교 함수를 인수로 전달해야한다.
let num = [2, 3, 5, 1, 4, 10, 100, 12];
num.sort((a, b) => a - b);
console.log(num); // [1, 2, 3, 4, 5, 10, 12, 100]
- sort((a, b) => a - b) 를 통해서 정렬순서를 정의하는 비교함수를 인수로 전달하게 되면 문제없이 정렬이 된다.
- 내림차순으로 정렬을 하려면 a - b 가 아닌 b - a로 정렬한다.
- 정렬되는 방법은 a - b 를 했을 때 반환 값이 0보자 작으면 비교함수의 첫 번째 인수를 우선하여 정렬하고, 0이면 정렬하지 않는다. 0보다 크면 두 번째 인수를 우선하여 정렬한다.
문자 정렬
let str = ["apple", "Orange", "melon", "orange"];
str.sort();
console.log(str); // ['Orange', 'apple', 'melon', 'orange']
let ascending_order = function (a, b) {
a = a.toUpperCase();
b = b.toUpperCase();
if (a > b) return 1;
else if (a < b) return -1;
else return 0;
};
console.log(str.sort(ascending_order)); // ['apple', 'melon', 'Orange', 'orange']
- 문자를 정렬할 때에도 인수로 전달할 수 잇는 비교함수가 필요하다.
- 대문자, 소문자별로 정렬이 된다.
- toUpperCase(), toLowerCase() 를 통해서 소문자, 대문자로 변경 후 정렬을 해주면 된다.
객체 정렬
let arr = [
{ id: 4, content: "JS" },
{ id: 1, content: "HTML" },
{ id: 2, content: "CSS" },
];
function compare(key) {
return (a, b) => (a[key] > b[key] ? 1 : a[key] < b[key] ? -1 : 0);
}
arr.sort(compare("id"));
console.log(arr);
/*
[
{ id: 1, content: 'HTML' },
{ id: 2, content: 'css' },
{ id: 4, content: 'js' }
]
*/
- 객체요소를 가지고 있는 배열을 정렬할 때에도 다른 비교함수가 필요하다.
- 매개변수 key값을 통해서 정렬을 하는 함수이다.
- 프로퍼티 값이 문자일 경우에는 산술 연산으로 비교하면 NaN이 나오므로 비교 연산을 사용한다.
- 비교 함수는 양수 / 음수 / 0 을 반환하게 만들어서 산술 연산 대신 비교 연산을 사용할 수 있다.
- "id"기준으로 오름차순 정렬을 해주었다.
arr.sort(compare("content"));
console.log(arr);
/*
[
{ id: 2, content: 'CSS' },
{ id: 1, content: 'HTML' },
{ id: 4, content: 'JS' }
]
*/
- "content"기준으로 오름차순을 해주게 되면 문자를 비교하여 정렬되는 모습을 볼 수 있다.
'Code note > 자바스크립트' 카테고리의 다른 글
자바스크립트 기본 문법 정리 (1) | 2022.09.11 |
---|---|
자바스크립트 원형 연결리스트 정리 (0) | 2022.09.10 |
자바스크립트 약수 구하기 코드 (0) | 2022.09.06 |
배열에서 큰수, 작은수 구하기 (0) | 2022.09.02 |
자바스크립트 reduce 사용방법 정리 팁! (0) | 2022.09.01 |