객체값이 왜 NaN가 되는지 모르겠습니다.

조회수 1632회

안녕하세요?

var b = fn('AACBDB')

여기서 일치하는 알파벳을 객체값에 넣고 일치할 경우 수를 증가 하고 싶은데, NaN이 되어서 질문 드립니다.

 {
    A:2,
    B:2,
    C:1
  }

이런 식으로 하고 싶습니다. 아래는 코드 원문입니다.

function fn (str) {
    var result = '';
    var characters = {};
    var strArr = str.split('');
    var strCopy = str.split('');

    for(var i = 0;i < strArr.length; i++){
        if(strArr[i] === strCopy[i]){
            characters[strArr[i]]++;
        };
    };

    console.log(characters);


    return result;
};

감사합니다.

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    위 코드에서 characters 의 각 요소의 값이 undefined 에서 연산을 시작하니 NaN 가 나오는 것 같습니다.

    그래서 아래와 같이 수정 하여야 할 것 같습니다.

    function fn (str) {
        var characters = {};
        var strArr = str.split('');
    
        for(var i = 0;i < strArr.length; i++){
            if(characters[strArr[i]] === undefined) {
                characters[strArr[i]] = 1;
            } else {
                characters[strArr[i]] += 1;
            }
        }
    
        // console.log(characters);
    
        return characters;
    };
    
    var  results = fn('BBBCCCEEEYYUUTTTTTTTT');
    
    console.log(results);
    

    실행결과 : { B: 3, C: 3, E: 3, Y: 2, U: 2, T: 8 }

    • 감사합니다.~^^ 김동규 2018.3.16 19:28
  • characters 객체에 해당 속성으로 초기값이 설정이 안되어 있어서 그런 것 같네요 :-)

    초기값이 숫자로 설정되었는지 확인해주는 과정이 추가된다면 해결될 것 같습니다..

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다.~^^ 김동규 2018.3.16 19:28

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)