본문 바로가기
개발/Javascript

문자열에서 특정 인덱스를 추출할때 charAt과 숫자인덱싱의 차이

by 안뇽! 2023. 5. 17.
반응형

문자열에서 특정 인덱스를 추출할때 charAt과 숫자인덱싱의 차이

자바스크립트에서 문자열의 특정 인덱스에 있는 문자를 얻는 방법에는 대표적으로 두가지가 있다. charAt() 메서드와 숫자인덱싱을 사용하는 방법이다. 이 두 방법 모두 문자열에서 특정 인덱스의 문자를 추출하는 데 사용되지만, 사용 방식과 특성에 차이가 있다.

charAt

charAt은 문자열에서 주어진 인덱스에 있는 문자를 반환한다. 만약 메서드에 벗엇난 인덱스를 전달하면 빈문자열을 반환한다.

숫자인덱싱

범위를 벗어난 인덱스를 전달하면 undefined를 반환한다.

프로그래머스 JadenCase

전에는 고민해보지 못한 내용인데 프로그래머스에서 JadenCase 문자열 문제를 통해 새롭게 알게 된 내용이다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

처음에는 다음과 같이 작성하니 런타임에러가 났다.

function solution(s) {
    return s.split(' ').map(el=>{
        const first =el[0].toUpperCase()
        const second = el.slice(1).toLowerCase()
    return first+second
    }).join(' ')
    
    
}

런타임에러때문에라면 모든 조건을 나누어주어야 하는가보다 생각하고 다음과 같이 작성하니 런타임에러는 뜨지 않았지만 실패케이스가 나타났다.

const isAlphabet =(str)=> /^[a-zA-Z]/.test(str)
const isRestLowerOrNumber =(str)=> /^[a-z0-9]+$/.test(str.slice(1))

function solution(s) {
    return s.split(' ').map(el=>{
        let first =el[0]
        let second = el.slice(1)
        // 첫글자가 영어임?
        if(isAlphabet(el)){
            first = first.toUpperCase()
        }
        if(!isRestLowerOrNumber(el)){
            second = second.toLowerCase()
        }
        //나머지면 그냥 el 보내기
        if(!isAlphabet(el)&&isRestLowerOrNumber(el)) {
            first=el[0];
            
        }

    return first+second
    }).join(' ')
    
    
}

인터넷에서 정답을 보니 charAt를 사용해야 했다.

function solution(s) {
    return s.split(' ').map(el=>{
        const first =el.charAt(0).toUpperCase()
        const second = el.slice(1).toLowerCase()

    return first+second
    }).join(' ')
    
    
}

 

  • s=' ' 일때 s[0] 은 undefined지만 s.charAt(0)은 ''임

그렇기 때문에 문자열의 특정 인덱스를 빼내려면 빈문자열의 경우를 생각하여 숫자인덱싱이 아닌 charAt을 써야 한다.

반응형

'개발 > Javascript' 카테고리의 다른 글

onClick과 onMousedown의 차이  (0) 2023.11.21
모달과 이벤트 버블링  (0) 2023.09.12
Chart.js  (0) 2022.05.12
Set : 배열 중복제거하기  (0) 2022.05.01
JSON에서는 undefined를 사용할 수 없다.  (0) 2022.01.28