인프런 커뮤니티 질문&답변

yh J님의 프로필 이미지

작성한 질문수

한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지

15. 배열 메서드-2

compare 함수 잘이해안가네요

해결된 질문

24.08.28 14:19 작성

·

56

0

(a,b)가 어떤걸 의미하는지 모르겠고

-1, 1, 0을 반환했을때 배열내부적으로 어떻게 처리되는지도

모르겠습니다.


let colors = ["green", "blue", "purple"];

 const compare = (a, b) => {
  if (a > b) return -1;
  else if (a < b) return 1;
  else return 0;
};

colors.sort(compare);
console.log(colors);

답변 1

0

효빈 Hyobin님의 프로필 이미지
효빈 Hyobin
지식공유자

2024. 08. 28. 14:29

안녕하세요 🙂

2- 15 강의에서 설명하고 있는 것과 같이,
매개변수 a는 배열의 다음 요소를, 그리고 b는 배열의 이전 요소를 의미합니다.

 

그리고 compare 함수의 내부에서는
배열의 다음 요소인 a가, 배열의 이전 요소인 b보다 크기가 클 경우에는 -1을 반환하고,
a보다 b가 클 경우에는 숫자 1을 반환합니다.

 

sort 메서드는 compare 함수가 -1을 반환하면, a 가 b보다 앞에 있어야 한다고 판단을 하고
숫자 1을 반환하면 b가 a보다 앞에 있어야 한다고 판단합니다.

 

그렇기 때문에 해당 코드든 purple, green, blue의 순서로 정렬이 되는 코드입니다.

 

감사합니다.

 

yh J님의 프로필 이미지
yh J
질문자

2024. 08. 28. 14:34

배열의 다음 요소가 a이고 이전 요소가 b라면

배열요소에서 순서가 b,a인가요??

효빈 Hyobin님의 프로필 이미지
효빈 Hyobin
지식공유자

2024. 08. 28. 15:10

네 그렇게 설명한 것이 맞습니다.

 

조금 자세하게 설명드려보자면,
맨 처음으로는 blue와 green를 비교하고 1을 반환해 green이 blue보다 앞에 와야 한다고 판단합니다.

그 다음으로는 purple과 blue를 비교하고, -1을 반환하기 때문에 purple이 blue 보다 앞에 와야 한다고 판단을 합니다.

마찬가지로 purple과 green을 비교하고, purple이 green 보다 앞에 와야한다고 판단해

결론적으로는 purple, green, blue 순서대로 정렬을 합니다.

 

a와 b의 순서를 다음과 같이 설명한것은 설명의 편의를 위한 것이고,
더 정확하게 말해보자면, 이 sort라는 메서드가 어떤 알고리즘으로 동작하는지에 따라 비교되는 요소들의 순서와 방식에 따라 달라질 수 있습니다.

yh J님의 프로필 이미지

작성한 질문수

질문하기