그럼에도 불구하고

👨‍💻

array.sort() 오름차순, 내림차순 정렬하기 본문

JavaScript/Function implementation

array.sort() 오름차순, 내림차순 정렬하기

zenghyun 2023. 1. 4. 18:27

배열 오름차순, 내림차순 정렬을 해보자

 

 

조건

1. 오름차순, 내림차순 버튼이 있고 버튼을 누르면 userDataList 배열에 있는 객체 값을 보여준다.

2. 오름차순 버튼을 누르면 id가 오름차순 된 순서대로 보여준다.

3. 내림차순 버튼을 누르면 id가 내림차순 된 순서대로 보여준다.

4. 최초에는 id가 오름차순 된 순서대로 보여준다. 

 

 

<div class="container">

    <button id="ascending">오름차순</button>
    <button id="descending">내림차순</button>
    
    <ul id="userList">
   
    </ul>
    
</div>

 

div 태그 안에 오름차순 버튼과 내림차순 버튼을 만들고, 버튼을 누르면 ul태그 안에 li 태그로 객체 값을 출력한다. 

 

 

 <script>
    const userDataList = [
      { id: 123, name: '홍길동' },
      { id: 3, name: '서길동' },
      { id: 47, name: '박길동' },
      { id: 763, name: '김길동' },
      { id: 14, name: '최길동' }
    ];

    const ascending = document.querySelector('#ascending');
    const descending = document.querySelector('#descending');

    function updateList() {
      let liText = '';

      for (const data of userDataList) {
        liText += `<li> ${data.id} : ${data.name}</li>`;
      }

      const userList = document.querySelector('#userList').innerHTML = liText;
    }

    function sortByAscending() {
      userDataList.sort((a, b) => {
        // console.log(`a.id : ${ a.id} , b.id : ${b.id}`);
        // console.log(a.id - b.id);
        return a.id - b.id;
      })
      updateList();
    }

    function sortByDescending() {
      userDataList.sort((a, b) => {
        // console.log(`a.id : ${ a.id} , b.id : ${b.id}`);
        // console.log(b.id - a.id);
        return b.id - a.id;
      })
      updateList();
    }

    ascending.addEventListener('click', () => {
      sortByAscending();
    })

    descending.addEventListener('click', () => {
      sortByDescending();
    })

    sortByAscending();
 </script>

 

 

결과

 

 

See the Pen Untitled by zenghyun (@zenghyun) on CodePen.

 

 


 

리뷰

 

특별하게 어려운 건 없었는데 sortByAscendingsortByDescending에서 return 값을 설정하는데 시간이 좀 걸린 것 같다. 

sort() 메서드에서 sort(a, b)를 비교한다고 했을 때, return 값은 a가 b보다 크다면 1, 같으면 0, a가 b보다 작으면 -1이라고 생각해도 어떻게 return 값을 줘야 하는지 이해가 안 됐다. 

 

그래서 mdn을 통해 sort()을 공부하고 console.log()으로 매개변수 값들을 비교해 보니

오름차순의 경우 return a.id-b.id; 내림차순의 경우 return b.id-a.id;를 하면 되는 걸 알게 됐다.  

 

각각의 함수에서 console.log로 값을 확인해보니 확실하게 이해가 됐던 것 같다.  :)

 

 

ref:

 

 

Array.prototype.sort() - JavaScript | MDN

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

 

Comments