ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문자열과 숫자에 접근하는 방법들 1 : +, isNan() 등
    JavaScript 2022. 9. 28. 17:29

    더하기 연산자를 활용하는 방법

    let s = "97 75 88 99 95 92 73";
    let list = s.split(' ').map((el)=>+(el)); // 문자열을 공백 기준으로 나누어 배열을 만들고, 각 요소를 숫자로 바꾼다.
    
    const list = s.split(' ').map(Number) 
    // let list = s.split(' ').map((el)=>+(el)); // 사실상 같은 코드이다.
    console.log(list) //[97, 75, 88, 99, 95, 92, 73] // 숫자로 된 배열
    console.log(...list) // 97 75 88 99 95 92 73 // 그마저 스프레드 하면 숫자만 나온다.

     

    +를 앞에 붙이면 모두 숫자가 될 것만 같으나, 그렇지 않다.

    const quantity = "12";
    
    console.log(+quantity); // 12 출력
    const quantity = "awesome";
    
    console.log(+quantity); // NaN 출력

    문자에 붙이면  NaN이 된다.

    그러나 이를 도리어 조건으로서 활용하는 방법도 있다.


    숫자와 문자가 섞여 있을 때, 문자에만 접근하는 방법

    let s = "2three45sixseven"
    function solution(s) {
        while(isNaN(+s)) {
            s = s.replace('zero',0)
            s = s.replace('one',1)
            s = s.replace('two',2)
            s = s.replace('three',3)
            s = s.replace('four',4)
            s = s.replace('five',5)
            s = s.replace('six',6)
            s = s.replace('seven',7)
            s = s.replace('eight',8)
            s = s.replace('nine',9)
        }
        return +s
    }
    
    console.log(solution(s)) // 234567

    isNaN() 은 괄호 안의 값이 NaN 이면 True를 반환한다. (NaN은 비교 연산(==, ===)을 사용해 판별할 수 없다. NaN == NaN, NaN === NaN false)

     

    while(isNaN(+s))  이라면, +s 가 NaN일 경우, 즉 문자일 경우 이후의 코드를 시행하겠다는 조건이 된다.

    숫자와 문자가 섞인 데이터 중 문자에만 접근하겠다는 것.

     


    기타 뻔질나게 하는 방법들

    let n = 718253
    
    function solution(n){
        let result =""
        const s = n.toString().split('').reverse().join('+')
        console.log(n.toString().split('').reverse().join('+')) // 3+5+2+8+1+7
    
        const d = n.toString().split('').map(Number).reduce((a, b) => a + b)
        console.log(n.toString().split('').map(Number).reduce((a, b) => a + b)) // 26
        return `${s}=${d}`;
    }
    
    console.log(solution(n)) // 3+5+2+8+1+7=26

     


    기타 뻔질나게 사용하는 방법들 이라고 했으나 주의할 점!

    let x =13 
    
    function solution(x) {
        let i = x.toString().split('').reduce((a,b) => a+b) // 각 자리 합
        // let i = x.toString().split('').reduce((a,b) => a+b, 0) 으로 하면 013이 나와 버린다. 0으로 시작하는 문자열을 합친거다.
           return x%i==0 ? true : false;
           
       }
    console.log(x.toString().split('')) // 13
    console.log(x.toString().split('').reduce((a,b) => a+b)) //그냥 13으로 나와버린다. 문자열을 합친거다.
    console.log(solution(x)) // true가 나와버린다!!!!

    숫자를 저렇게 손가는 그대로 문자열로 만들고, 나누고, 합치면... 다시 문자열 "13"이 반환된다.

    (하샤드라는 멋진 양반이 상상한 숫자에 대한 문제였다. 숫자 x를 각자리의 합으로 나누면 0이 되는 수. 그러므로 13은 false 를 반환해야만 한다.)

     

    let x =13 
    
    function solution(x) {
        let arr = x.toString().split('')
        let i = arr.map(v=> parseInt(v)).reduce((a,b) => a+b) // 각 자리 합
           return x%i==0 ? true : false;
           
       }
    
    console.log(x.toString().split(''))  // [ '1', '3' ] 
    console.log(['1','3'].map(v=> parseInt(v)).reduce((a,b) => a+b)) // 4
    console.log(solution(x)) // false

     

    다시 숫자로 변환하고 합치는 과정을 거쳐야 한다.

     

     

     

Designed by Tistory.