우선 문자열을 배열 형태로 만들고,
배열의 인덱스가 배열 길이 -4한 값보다 작을 경우에 마스킹한 배열을 생성해서 풀이했다.
function solution(phone_number) {
return phone_number.split("").map((v,i) => {
return i < phone_number.length - 4 ? "*" : v
}).join("");
}
나는 문자열 문제가 나오면 항상 아래 순서대로 풀이한다.
1. 문자열.split("") 문자열 쪼개서 배열만들고
2. .map((v) => v) 조건달아서 새 배열만들고
3. .join("") 다시 문자열로 만들기
왜냐면 이게 제일 만만하기 때문....
하지만 새로운 방식이 이렇게나 많다!
다른사람의 풀이를 보자. 이건 개인적으로 놀랐던 풀이
const solution = n => [...n].fill("*",0,n.length-4).join("")
// "*"로 채운다, 0번부터, n.length-4 까지.
문자열을 split("")으로 쪼개지 않고 spread operator로 쓰는 것도 좋구나.
fill에 인자를 세가지나 전달할 수 있는 건 몰랐다.
fill은 잘 써먹으면 무지 유용하겠다!
// Fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
string replace와 정규표현식을 사용한 다른사람의 풀이.
function hide_numbers(s){
return s.replace(/\d(?=\d{4})/g, "*");
}
정규표현식만 알면 훨씬 간단한데 참 어렵단말이지
repeat, slice를 사용한 다른사람의 풀이.
🚨 하지만 MDN repeat() 은 IE 지원이 안된다 🚨
function hide_numbers(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
return result;
}