프론트
JS) .sort() 고차함수 - 문자열로 변경되는 sort를 보완해보자 ( 배열 오름차순, 내림차순 정렬)
뽀짝코딩
2024. 7. 6. 12:38
728x90
숫자배열 오름,내림차순 정렬
.sort() 는 오름차순으로 배열값을 정렬한다.
문제는 문자열로 치완해서 유니코드 순서에 따라 정렬하기 때문에 우리의 예상과 결과값이 다르다는 것이다. 그것을 보완하는 방법이 고차함수 이다.
아래처럼 ascending_order 이라는 함수를 만들어 사용하면 .sort() 오름차순 descending_order는 내림차순으로 숫자가 정리된다.
let nums = [1, -1, 4, 0, 10, 20, 12];
console.log(nums.sort()); //[ -1, 0, 1, 10, 12, 20, 4 ]
console.log(nums.reverse()); //[ 4, 20, 12, 10, 1, 0, -1 ]
// x=1 - y=(-1) = 2 -> x=-1 y=1
let ascending_order = function (x, y) {
return x - y;
};
let descending_order = function (x, y) {
return y - x;
};
console.log(nums.sort(ascending_order)); //[ -1, 0, 1, 4, 10, 12, 20 ]
console.log(nums.sort(descending_order)); /[ 20, 12, 10, 4, 1, 0, -1 ]
문자배열 오름, 내림 차순 정렬
문자열은 대문자가 더 작은 수라 sort()로 오름차순 정렬을 하면 Orange가 맨앞에 온다.
.toUpperCase(); //로 모두 대문자로 변환
if (x > y) //만약 x가 y 보다 크면 return 1; //리턴 1로 해서 자리를 바꾸고
else if (y > x) //만약 y가 x보다 크면 return -1; //리턴 -1을 해라;
else return 0; //아니면 0 리턴.
이렇게 해서 비교후 콘솔로 찍으면 아래처럼 결과가 나온다.
let fruits = ["apple", "Orange", "orange", "banana"];
console.log(fruits.sort()); //[ 'Orange', 'apple', 'banana', 'orange' ]
console.log(fruits.reverse()); //[ 'orange', 'banana', 'apple', 'Orange' ]
let ascending_order = function (x, y) {
x = x.toUpperCase();
y = y.toUpperCase();
if (x > y) return 1;
else if (y > x) return -1;
else return 0;
// return x > y ? 1 : -1; //삼항연산자
};
console.log(fruits.sort(ascending_order)); //[ 'apple', 'banana', 'orange', 'Orange' ]
console.log(fruits.reverse(ascending_order)); //[ 'Orange', 'orange', 'banana', 'apple' ]
참고
제로베이스강의 - 이론부터 실전까지 모든 것을 담은 자료구조/알고리즘 - 고차함수
반응형