문제 이해하기
이번 글에서는 숫자 배열을 입력받아 각 숫자에 대응하는 객체를 생성하는 JavaScript 함수를 작성해 보겠습니다. 요구 사항은 다음과 같습니다.
배열의 각 숫자마다 하나의 객체를 만들어야 하며, 객체의 키(key)는 문자열 형태의 숫자, 값(value)은 해당 숫자에 대응하는 문자가 됩니다. 최종적으로는 이렇게 만들어진 객체들을 담은 배열을 반환하면 됩니다.
해결 방법 1: for 반복문 사용
가장 기본적인 접근 방식은 전통적인 for 반복문을 활용하는 것입니다. 배열을 순회하면서 각 요소에 대해 새로운 객체를 생성하고, String.fromCharCode()로 문자를 변환한 뒤 결과 배열에 추가합니다.
const arr = [67, 84, 98, 112, 56, 71, 82];
const mapToCharCodes = (arr = []) => {
const res = [];
for(let i = 0; i < arr.length; i++){
const el = arr[i];
const obj = {};
obj[el] = String.fromCharCode(el);
res.push(obj);
};
return res;
};
console.log(mapToCharCodes(arr));출력 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[
{ '67': 'C' },
{ '84': 'T' },
{ '98': 'b' },
{ '112': 'p' },
{ '56': '8' },
{ '71': 'G' },
{ '82': 'R' }
]해결 방법 2: map() 메서드로 더 간결하게
map() 메서드를 사용하면 위 로직을 훨씬 간결하고 선언적으로 표현할 수 있습니다. 계산된 속성명(computed property name) 문법인 대괄호 []를 활용하면 동적으로 키를 지정할 수 있습니다.
const mapToCharCodes = (arr = []) =>
arr.map(el => ({ [el]: String.fromCharCode(el) }));
console.log(mapToCharCodes([67, 84, 98, 112]));
// [ { '67': 'C' }, { '84': 'T' }, { '98': 'b' }, { '112': 'p' } ]핵심 개념: String.fromCharCode()
String.fromCharCode()는 정적(static) 메서드로, UTF-16 코드 유닛 값들을 받아 그에 대응하는 문자열을 반환합니다. 예를 들어 ASCII 코드 기준으로 다음과 같이 동작합니다.
67→'C'84→'T'98→'b'112→'p'
객체 키는 항상 문자열로 변환되기 때문에, 숫자 67을 키로 지정하면 실제 저장될 때는 '67'이라는 문자열 키가 됩니다. 이 점만 유의하면 숫자 배열을 문자 코드 객체 배열로 손쉽게 매핑할 수 있습니다.