코딩기록

JS) .sort() 고차함수 - 문자열로 변경되는 sort를 보완해보자 ( 배열 오름차순, 내림차순 정렬) 본문

프론트

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' ]

 

 

 

참고

제로베이스강의 - 이론부터 실전까지 모든 것을 담은 자료구조/알고리즘 - 고차함수

 

 

반응형
Comments