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

현지원님의 프로필 이미지
현지원

작성한 질문수

[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)

[추천/최근 검색어] 최근 검색어 1

sort() 질문 드립니다.

작성

·

214

·

수정됨

1

안녕하세요.

최근 검색어 구현 중 Store.js에서 스토리지의 historyData를 받아와서 sort를 할 때,

강의에서 나오는대로 > 부등호로 하면 정렬이 되지 않고

- 를 해줘야 내림차순으로 정렬이 됩니다.

 

왜 강의와 똑같이 부등호로 했을 때 정렬이 안되는 것일까요?

 

  getHistoryList() {
    return this.storage.historyData.sort(this._sortHistory); // 날짜 역순 정렬
  }

  _sortHistory(history1, history2) {
    // return history2.date > history1.date;
    return history2.date - history1.date;
  }

 

답변 2

1

김정환님의 프로필 이미지
김정환
지식공유자

지원님 안녕하세요? 자바스크립트 배열의 sort 함수를 사용하실때 양수,음수,0을 반환하는 비교함수를 사용하는 것이 맞습니다. 제가 정확한 동작을 모르고 부등호를 사용한 것인데요. 이것은 브라우져 별로 코드를 평가하는 차이가 있는 것 같습니다. 지원님께서 사용하신 것처럼 - 연산자를 사용해 주세요.

비슷한 질문이 있어서 참고하시면 좋겠습니다.

현지원님의 프로필 이미지
현지원
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다.

현지원님의 질문은 Array.prototype.sort() 함수의 사용 방법과 JavaScript에서 정렬 로직의 작동 방식에 관한 이해와 관련이 있습니다.

JavaScript에서 .sort() 메소드는 배열의 요소를 정렬할 때, 비교 함수를 제공할 수 있습니다. 비교 함수는 두 요소 a와 b를 비교하여 반환값에 따라 정렬 순서를 결정합니다. 반환 값이 음수이면 a가 b보다 앞에 오도록 정렬하고, 양수이면 b가 a보다 앞에 오도록 정렬합니다. 0이면 두 요소의 순서를 변경하지 않습니다.

강의에서 나온 부등호(>)를 사용한 방식이 정렬에 실패하는 경우는, 부등호를 사용하여 반환된 결과(true 또는 false)가 sort 메소드에 필요한 숫자 값(-1, 1, 0)로 직접적으로 변환되지 않기 때문입니다. - 연산자를 사용하면, 두 날짜의 차이를 숫자로 직접 반환하여 sort 함수가 이해할 수 있는 정수를 제공하여 정렬 조건을 충족시킵니다.

현지원님의 상황에 대해 유사한 문제 상황이 언급된 다음 질문&답변 게시글이 도움이 될 것 같습니다:

  • 데이터 sort 적용 문의에서는 sort 메소드의 콜백 함수에 대해 질문하고 있으며, 같은 함수에서 정렬이 제대로 작동하지 않는 문제를 다루고 있습니다.
  • 해당 답변에서는 sort 메소드에 사용되는 콜백 함수가 정수를 반환하도록 구현해야 한다는 설명이 있습니다. 특히 비교 연산자 대신 뺄셈 연산을 사용하면 기대하는 방식대로 정렬이 작동한다는 해결책을 제공합니다.

이 답변은 질문에서 언급한 문제의 원인과 해결 방안에 대해 직접적으로 관련이 있으며, Array.prototype.sort()의 사용 방식을 이해하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

현지원님의 프로필 이미지
현지원

작성한 질문수

질문하기