-
문자열과 숫자에 접근하는 방법들 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
다시 숫자로 변환하고 합치는 과정을 거쳐야 한다.
'JavaScript' 카테고리의 다른 글
배열에 접근하는 방법들2 : set(), map(), 배열의 중복제거 (0) 2022.09.28 조건을 거는 방법들 1 : while, do while 등 (0) 2022.09.28 배열에 접근하는 방법들 1 : forEach(), filter (0) 2022.09.28 forEach(), 콜백함수, 익명함수 (0) 2022.09.26 JWT (JSON Web Token) (0) 2022.09.25