- 숫자배열에
m이 있으면rn으로 변경해서 returnrn이 있으면 그대로 returnm이 없으면 그대로 return- 숫자배열은 영소문자로만 구성
const solution = (rny_string) => rny_string.replace(/m/g, 'rn');
메서드만 잘 알고 있으면 쉬운 문제이긴 했다.
문자열 요소를 치환해주는 replace()를 사용하여,
문자열 내 m을 모조리 찾아주는 정규식표현을 첫번째 파라미터에 입력,
두번째 파라미터에는 치환시킬 요소 넣어주면 된다.
replace()를 쓸 생각 하기 전에 여러 시도를 하고 검색을 했는데,
어머낫 중요한 지식을 얻었다..! 🪄 👇🏻
+++
나의 첫 시도는, m의 index를 찾아 그 index를 활용하여 splice() 를 사용하려고 했다.
근데 자꾸 TypeError(splice is not a function) 가 뜨는 것 ! 🤨
string이 배열로도 사용되는 걸로 알아서, 배열 메소드를 사용한건데 무엇이 문제인가! 하고 지피티오빠한테 물어봤더니...
string은 자바스크립트에서 원시 타입으로,불변한 값(immutable value)
splice()는 원본 배열에 변경을 일으키는 메서드로, 불변한 값에 사용하지 못하는 메서드
라는 지식을 얻을 수 있었다. JS 기초 구멍 하나씩 메꾸는 중 ...
const solution = (rny_string) => rny_string.replaceAll('m', 'rn');
사실 replaceAll() 쓰면 정규식 표현 안 써도 된다.
첫번째 파라미터 요소를 모조리 찾아주는 기능이 내장돼있다.
function solution(rny_string) {
var answer = '';
return [...rny_string].map(e => e == 'm' ? 'rn' : e).join("");
}
map()을 사용하여 이렇게 풀 수도 있겠구나 싶어서, 참고하려고 가져왔다.
+ 설명 👇🏻
const fakeString = 'macdonaldmm'
function solution(s) {
console.log([...s])
// [ 'm', 'a', 'c', 'd', 'o', 'n', 'a', 'l', 'd', 'm', 'm' ]
// 1. spread operator를 사용하여 문자열을 배열로 만들어줌
console.log([...s].map(el => el === 'm' ? 'rn' : el))
// [ 'rn', 'a', 'c', 'd', 'o', 'n', 'a', 'l', 'd', 'rn', 'rn' ]
// 2. map() 사용하여 새 배열로 반환
console.log([...s].map(el => el === 'm' ? 'rn' : el).join('')) // 'rnacdonaldrnrn'
// 3. join의 구분자(seperator)를 아무것도 없이('') 주어 한 단어로 합침
return [...s].map(el => el === 'm' ? 'rn' : el).join("")
}
solution(fakeString); // 'rnacdonaldrnrn'
메소드를 사용하고 응용하며 기초를 배워가는 재미가 있다.
오늘도 코테연습 끝! 💫