우선 문자열을 배열로 바꾼 뒤, map을 통해 해당 원소가 숫자면 ans에 숫자만큼 더해줘야겠다.
근데 문제가 있었다. 해당 원소가 숫자인지, 문자인지 판별하는 방법을 몰랐기 때문...
그래서 구글링 했다.
function solution(my_string) {
let answer=0;
[...my_string].map(e=>isNaN(e) ? 0 : answer+=Number(e));
return answer;
}
만약 원소가 숫자가 아니면, 새로운 배열에 0을 넣고, 아니면 answer에 숫자만큼 더한다.
위 함수는 어떤 값 value가 NaN인지 판별한다. 값이 NaN이면 true, 아니면 false.
포괄적으로 매개변수가 숫자이면 false, 숫자가 아니면 true라고 반환하는 함수라고 생각하면 된다.
isNaN(value)
위 함수의 특이한 점은, isNaN 함수의 인수가 Number형이 아닌 경우, 이 값은 먼저 숫자로 강제 변형된다. 그 뒤에 NaN인지 판별됨.
그니까 다른 오류를 피하기 위해선 아래와 같이 생각해야한다.
isNaN = function(value) {
Number.isNaN(Number(value));
}
다른 풀이로는, 정규 표현식을 쓴 게 있다.
function solution(my_string) {
const answer = my_string.replace(/[^0-9]/g, '')
.split('')
.reduce((acc, curr) => acc + Number(curr), 0);
return answer;
}
숫자가 아닌 모든 문자들을 ''로 치환한 뒤, ''로 split하여 배열로 만든다.
그다음 reduce 메서드를 통해 Number형으로 변환한 각 원소를 더한다.
제일 깔끔한 것 같다.
출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN