문자열을 첫 번째이자 유일한 인수로 받아, 해당 문자열에 포함된 고유한(unique) 문자들을 키로 가지는 객체를 생성하는 함수를 작성해야 합니다. 이때 각 키의 값은 기본적으로 0으로 설정됩니다.
예를 들어 다음과 같습니다.
// 입력 문자열이 다음과 같다면:
const str = 'hello world!';
// 출력 결과는 다음과 같아야 합니다:
const obj = {"h": 0, "e": 0, "l": 0, "o": 0, " ": 0, "w": 0, "r": 0, "d": 0, "!": 0};
그럼 이 함수의 코드를 직접 작성해 보겠습니다.
구현 아이디어
핵심 로직은 매우 간단합니다.
split("")을 사용해 문자열을 개별 문자로 이루어진 배열로 분리합니다.reduce()메서드로 배열을 순회하면서 빈 객체({})에 각 문자를 키로 추가하고 값을0으로 지정합니다.- 동일한 문자가 여러 번 나타나도 객체 키의 특성상 자동으로 중복이 제거되므로, 자연스럽게 고유 문자만 남게 됩니다.
예제 코드
const str = 'hello world!';
const stringToObject = str => {
return str.split("").reduce((acc, val) => {
acc[val] = 0;
return acc;
}, {});
};
console.log(stringToObject(str));
console.log(stringToObject('is it an object'));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
{ h: 0, e: 0, l: 0, o: 0, ' ': 0, w: 0, r: 0, d: 0, '!': 0 }
{ i: 0, s: 0, ' ': 0, t: 0, a: 0, n: 0, o: 0, b: 0, j: 0, e: 0, c: 0 }'hello world!'의 경우 길이가 12글자지만, 중복된 문자('l'은 3번, 'o'는 2번 등장)가 하나의 키로 병합되어 최종적으로 9개의 고유 키만 객체에 존재하는 것을 확인할 수 있습니다.
마무리
이처럼 split()과 reduce()를 조합하면 단 몇 줄의 코드로 문자열을 문자별 객체로 손쉽게 변환할 수 있습니다. 이 패턴은 문자 빈도수 계산, 아나그램 검사 등 다양한 문자열 처리 문제의 기초로 활용되므로 꼭 익혀두면 유용합니다.