문제 : https://programmers.co.kr/learn/courses/30/lessons/81301
function solution(txt) {
const list = {
zero: 0,
one: 1,
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
};
for (const obj in list) {
while (txt.indexOf(obj) !== -1) {
txt = txt.replace(obj, list[obj]);
}
}
return Number(txt);
}
console.log(solution('one4seveneight')); // 1478
console.log(solution('23four5six7')); // 234567
console.log(solution('2three45sixseven')); // 234567
console.log(solution('1zerozero')); // 100
console.log(solution('oneonesixsix')); // 1166
//방법1 - replace, while, isNaN 활용
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
}
//방법2 - for, split, join 활용
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
var answer = s;
for(let i=0; i< numbers.length; i++) {
let arr = answer.split(numbers[i]);
answer = arr.join(i);
}
return Number(answer);
}
//방법3 - entries, 정규식 활용
function solution(s) {
let charSet = {
zero: 0,
one: 1,
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
};
for (let [key, value] of Object.entries(charSet)) {
let re = new RegExp(key, 'g'); //<-new RegExp로 정규식 쓸땐 모든 인자를 문자로 "g"이렇게 써야 함.
s = s.replace(re, value);
}
return parseInt(s, 10);
//parseInt는 기수(radix)(10진수)를 2번째 인자에 항상 넣어줘야 함, 안넣어주면 2진수로 변환되서 출력되는 경우가 있어서.
}
질문 : replace로 해당 문자를 다 숫자로 바꿧는데 타입이 여전히 string인 이유는?? : "1234"이렇게 된 것임. 따라서 최종적으로 자료형을 number로 바꿔줘야 함.
문자를 정수로 바꾸기
console.log(+'23'); // 23 ←1.문자열에 포함된 숫자를 찾아서 number로 형변환을 시켜준다.
console.log(+'one23'); // NaN ←2.그러나 문자를 정수로 바꾸면 NaN
console.log(typeof +'one23'); // number ←3.NaN도 유형이 number임.
const object1 = {
a: 'some1',
b: 'some2' };
console.log(Object.entries(object1)); // [ ["a","some1"] , ["b","some2"] ]
String.split()
-의미: 어떤 부호 기준으로 그 부호 앞뒤로 문자열을 나눠 배열의 요소로 만들어 반환함
-반환: "문자열을 → 배열로" 반환.
Array.join()
-의미: 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.
-반환: "배열을 → 문자열로" 반환.
let txt = 'oneone234';
txt = txt.split('one'); // ["","","234"]
txt.join(1); // 11234