정수를 문자열로 바꾼 뒤, 문자열을 배열로 바꾸고 각 원소를 answer에 더해줌. 근데 지금 보니까 왜 reduce로 안 풀었지 싶네
function solution(n) {
let str=String(n);
let arr=[...str];
let answer=0;
arr.map(e=>answer+=Number(e));
return answer;
}
function solution(n) {
return n
.toString()
.split("")
.reduce((acc, cur) => acc + Number(cur), 0);
}
(1) 정수n을 문자열로 타입변환한 뒤
(2) split('')으로 배열로 만들어 준다.
(3) 각 원소를 다시 정수로 변환하여 더해줌.
reduce() 개념
map() 개념
join(), split() 개념
위 코드에서 눈에 띄는 점은 두 가지이다. toString()과 reduce 내에서 Number()
toString()은 문자열을 반환하는 object의 대표적인 방법이다.
obj.toString()
모든 객체에는 객체가 문자열로 표시 혹은 참조 될 때 자동으로 호출되는 toString()메서드를 갖고 있다. 즉, Object를 비롯한 모든 객체에 상속됨.
toNumber는 없다는 게 당연하면서도 웃김ㅋㅋ
String 전역객체로, 문자열의 생성자다!
String(thing)
thing은 문자열로, 변환할 아무 값을 의미한다.
나는 문제를 풀면서 (1) 방법으로 풀었고, 다른 사람은 (2) 방법으로 풀었다.
(1) let str=String(n)
(2) n.toString()
String과 toString의 차이는 다음과 같다.
var s1 = '2 + 2'; // creates a string primitive
var s2 = new String('2 + 2'); // creates a String object
console.log(eval(s1)); // returns the number 4
console.log(eval(s2)); // returns the string "2 + 2"
//-----------------------------
const stringObj = new String('foo');
console.log(stringObj);
// String { "foo" }
console.log(stringObj.toString());
//"foo"
숫자를 표현하고 다룰 때 사용하는 원시 래퍼 객체...
원시 값(primitive, 원시 자료형): 객체가 아니면서 메서드도 가지지 않는 데이터. 7종류이고 불변하여 변경 불가. 원시값을 변형하기 위해서는 다른 변수에 할당 한 뒤 해야함.
즉, Number(value)처럼 함수로 사용하면 문자열이나 다른 값을 Number타입으로 바꾼다고 생각하면 된다. 만약 인수를 숫자로 변환할 수 없으면 NaN을 반환한다.
//리터럴 구문
123; // 백 이십 삼
123.0; // 동일
123 === 123.0; // 참
//함수 구문
Number('123'); // 숫자 123을 반환
Number('123') === 123; // 참
Number('unicorn'); // NaN
Number(undefined); // NaN
출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/toString
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String