이번 글에서는 첫 번째 인수로 문자열을, 두 번째 인수로 숫자 배열을 받아서, 배열 요소가 가리키는 인덱스 위치의 모든 문자를 별표(*)로 대체하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
구현 아이디어
핵심 로직은 크게 세 단계로 나눌 수 있습니다.
split('')메서드로 문자열을 개별 문자의 배열로 변환합니다.reduce()메서드를 사용해 두 번째 인수로 전달받은 인덱스 배열을 순회하며, 해당 위치의 문자를 '*'로 교체합니다.join('')메서드로 다시 하나의 문자열로 합쳐 반환합니다.
예제 코드
실제 동작하는 코드는 다음과 같습니다.
const str = "Lorem ipsum dolor sit amet consectetur adipiscing elit";
const arr = [4, 7, 9, 12, 15];
const replaceWithAsterisk = (str, indices) => {
let res = '';
res = indices.reduce((acc, val) => {
acc[val] = '*';
return acc;
}, str.split('')).join('');
return res;
};
console.log(replaceWithAsterisk(str, arr));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
Lore* i*s*m *ol*r sit amet consectetur adipiscing elit
코드 설명
str.split('')은 문자열을 한 글자씩 쪼개어 배열로 만듭니다. 이렇게 만들어진 배열을 reduce()의 초기값으로 사용하면, 인덱스 배열 [4, 7, 9, 12, 15]를 순회하면서 각 인덱스에 해당하는 문자를 '*'로 덮어쓰게 됩니다. 마지막으로 join('')을 호출해 수정된 문자 배열을 다시 하나의 문자열로 결합하면 원하는 결과를 얻을 수 있습니다.
이 방식은 원본 문자열을 직접 수정하지 않고 새로운 문자열을 생성하기 때문에, 불변성(immutability)을 유지하는 함수형 프로그래밍 스타일에도 잘 어울립니다.