[JavaScript] JavaScript 기본 다지기

2024. 10. 9. 22:51JavaScript

오늘은 JavaScript를 접한 나를 위해 기본을 한 번 다져볼 것이다.


유의사항

- JavaScript는 자료형을 쓰지 않아도 된다.

동적 타입을 지원해주기 때문.

같은 변수에 서로 다른 값을 넣어도, 에러가 나지 않고 값과 타입이 변한다.

 

- 변수로는 var와 let이 있다. 그러나, 일반적으로 let을 많이 사용한다.

var는 재선언이 가능해서, 변수가 어디에 선언되어 있는지 판단하기가 어렵기 때문에

프로그램상의 오류를 일으킬 수 있어서 잘 사용하지 않는다.

 

- 상수로는 const가 있다. 상수는 변하지 않고 일정한 값을 갖는 수를 의미

상수로 지정한 후에는 나중에 값을 바꿀 수 없다.

 

변수

let으로 선언

> let apple = 'yummy'

 

상수

const로 선언

> const arr = [ 1, 2, 3 ]

 


숫자로 구성된 배열 정렬

배열을 만든다

> const arr = [4, 8, 2, 7, 6, 1, 10]

 

배열을 정렬하는 함수 toSorted

람다 함수식을 사용하여, 오름차순으로 정렬한다.

> const arr2 = arr.toSorted((a, b) => a - b)

 

(+) 만약 내림차순 정렬이라면?

> cosnt arr2 = toSorted((a, b) => b - a)

<ul class="test1"></ul>

    <script>
        const arr = [4, 8, 2, 7, 6, 1, 10]
        console.log(arr)

        // const arr2 = arr.toSorted((a, b) => { return a - b })
        const arr2 = arr.toSorted((a, b) => a - b)
        console.log(arr2)

        const test1 = document.querySelector('ul.test1')
        arr2.forEach((num) => {
            test1.innerHTML += '<li>' + num + '</li>'
        })
    </script>
    
</body>
</html>

 

결과

  • 1
  • 2
  • 4
  • 6
  • 7
  • 8
  • 10

문자열 배열 정렬

자바스크립트는 문자열도 크기 비교가 가능하다.

 

정렬 기준 함수를 전달하지 않아도, 문자열로 정렬해주지만 이후 객체 혹은

HTMLElement를 정렬하려면 직접 정렬 기준식을 작성할 줄 알아야 한다.

 

정렬함수에 전달되는 콜백함수는 정수를 반환한다.

반환되는 정수가 0보다 큰지, 작은지 판별하여 정렬을 수행한다.

따라서 작성하는 콜백함수에는 항상 1 혹은 -1을 반환할 수 있도록 처리한다.

 

만약 비교기준이 정수라면 -연산을 이용하여 두 수의 차이만 반환해도 된다.

 

삼항연사자를 이용한 오름차순 정렬

> const arr2 = arr.toSorted((a, b) => {return (a > b) ? 1 : -1 })

 

(+) 만약 내림차순 정렬을 하려면? 

->   const arr2 = arr.toSorted((a, b) => {return (a < b) ? 1 : -1 })

 <ul class="test"></ul>

    <script>
        const arr = ['유빈', '유진', '현웅', '민정']
        // 위 배열을 정렬하여 ul.test에 출력하세요

        console.log('apple' > 'banana') // "apple".compareTo("banana") > 0
        console.log('apple' < 'banana') // "apple".compareTo("banana") < 0

        const arr2 = arr.toSorted((a, b) => {return (a > b) ? 1 : -1})

        const ul = document.querySelector('ul')
        arr2.forEach(e => ul.innerHTML += '<li>' + e + '</li>')
    </script>
    
</body>
</html>

 

결과

  • 민정
  • 유빈
  • 유진
  • 현웅

버튼을 클릭했을때 정렬되도록 하기 

 

버튼의 id 가 sortAsc 인 요소를 getElementById 를 이용하여 불러온다.

->  const sortAsc = document.getElementById('sortAsc')

 

정렬 대상을 불러온다.

->  const ul = document.querySelector('ul')

 

CSS선택자로 모든 요소를 NodeList 형태로 불러온다.

->  const liList = document.querySelectorAll('ul > li')

 

NodeList타입에는 sort()가 없기 때문에, 배열로 바꿔준다.
->   const liArray = Array.from(liList)

 

정렬을 수행할 대상들은 <li> 이고, 그 기준은 <li>의 내부 텍스트이다.
->    const resultArray = liArray.toSorted((a, b) => { return a.innerText > b.innerText ? 1 : -1 })

 

정렬을 수행했지만 스크립트내부에서만 적용되기 때문에

문서에 반영하기 위해 appendChild를 수행한다.


기존에 있는 요소이므로, 추가하지 않고 자리만 바꾼다.

->   resultArray.forEach(e => ul.appendChild(e)) 

<ul>
        <li>유빈</li>
        <li>민정</li>
        <li>진호</li>
        <li>재영</li>
        <li>민서</li>
        <li>형주</li>
    </ul>
    <div>
        <button id="sortAsc">오름차순 정렬</button>
    </div>

    <script>
        const sortAsc = document.getElementById('sortAsc')

        const ul = document.querySelector('ul')

        sortAsc.onclick = function() {
            const liList = document.querySelectorAll('ul > li')

            const liArray = Array.from(liList)

            const resultArray = liArray.toSorted((a, b) => {
                return a.innerText > b.innerText ? 1 : -1
            })

            console.log(resultArray)

            resultArray.forEach(e => ul.appendChild(e)) 
        }
    </script>
    
</body>
</html>

 


아직 자바스크립트는 익숙치 않은 언어이지만 나름 재미도 있고, 별로 어렵게 느껴지지 않아서 다행이다.

 

'JavaScript' 카테고리의 다른 글

[JavaScript] AJAX  (0) 2024.10.10
[JavaScript] json 화면 구현  (0) 2024.10.10
[JavaScript] Search Filter  (0) 2024.10.10
[JavaScript] ClickEvent  (0) 2024.10.10
[JavaScript] 정렬  (7) 2024.10.09