자바스크립트 Sort 함수

낭만개발자·2022년 1월 26일
0

JavaScript

목록 보기
10/14
const nums = [1, 10, 20, 2, 3, 5, 70, 9];

nums.sort((a, b) => {
    //내림차순 
    //return b-a

    //오름차순
     return a-b
});

console.log(nums);

Sort함수는 거두절미하고 쉽게만 말하면 파라미터 (next, prev) 이렇게 next,prev 요소를 활용해서 return값이 양수이면 그대로 두고, 음수이면 요소 위치를 바꾼다.
그래서 return 값을 양수이면 위치이동이 없으므로(정렬 된거라고 볼수 있으니) return 값을 양수로 만들려고 노력한다
라고 생각하면 정렬 코드를 쉽게 이해할 수 있다

숫자 내림차순 정렬을 하고 싶어!

즉 파라미터 (next, prev)를 앞으로 편의상 위 코드처럼(a, b)로 말하겠다.
내림차순은 배열중 prev요소가 항상 next요소보다 커야 한다. 즉 arr[0]>=arr[1]>=arr[2]... 이게 내림차순. 따라서 prev-next 는 항상 양수
즉, b-a는 항상 양수다. 3-2는 양수고, 2-1도 양수다. 그래서 return에 양수가 되도록 b-a (= prev-next) 을 적어주면 숫자 배열에선 내림차순 정렬이 적용된다

이번엔 오름차순 정렬을..!

위에 말한 것처럼 오름차순 정렬을 상상하면 [1,2,3] 형태다.
이 형태에서 항상 양수가 되려면 next-prev 식이면 항상 양수 결과일 것이다. (숫자가 점점 커지는게 오름차순이니 당연히 next - prev는 양수가 되지!) 즉 a, b로 치환하면 return a - b는 숫자 오름차순 정렬이 된다.

즉 정렬이 됬을때 배열 요소를 상상해보고, 그때 a, b 파라미터 연산식에서 무조건 양수가 되는식을 return에 적어주면 된다.

가장 헷갈리는게 a는 next 요소고 b는 prev 요소다. 자꾸 a가 prev 일것 같은 착각이 드는데 그게 가장 헷갈리는 부분 ;;

문자일때 sort

연예인 객체 배열에서 객체 네임 순으로 오름,내림차순 정렬을 해보자
연예인 키, 나이는 정확하지 않다..! 어쨋든 요것도 위와 같이 오름/내림 차순일때 상상해서 파라미터 a와 b의 연산이 1이 되는 식을 return 해주면 된다.

오름차순이라면

a-b(next - prev) 는 양수 여야 한다
그래서 조건식을 a.name > b.name ? 1 : -1 이고

내림차순이라면

b-a(prev - next) 는 양수여야 한다
그래서 조건식을 b.name > a.name ? 1 : -1 로 두면 된다.

다음번에 sort 볼땐 안헷갈렸으면 한다. sort랑 친해지고 싶다

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글