점 표기법 문자열을 중첩 객체로 변환하기
다음과 같이 점 표기법(dot notation)으로 작성된 문자열이 있다고 가정해 보겠습니다.
const keys = "details1.details2.details3.details4.details5"
그리고 이 키 경로의 마지막에 저장할 값은 다음과 같습니다.
const firsName = "David";
점 표기법 문자열을 실제 값이 담긴 중첩 객체(nested object)로 변환하려면 split('.')과 map()을 함께 활용하면 됩니다. 먼저 split('.')으로 문자열을 개별 키로 나눈 뒤, map()으로 각 키를 순회하면서 객체를 단계별로 중첩시키는 방식입니다.
예제 코드
const keys = "details1.details2.details3.details4.details5"
const firsName = "David";
var tempObject = {};
var container = tempObject;
keys.split('.').map((k, i, values) => {
container = (container[k] = (i == values.length - 1 ? firsName : {}))
});
console.log(JSON.stringify(tempObject, null, ' '));
코드 동작 원리
tempObject는 최종 결과가 저장될 빈 객체이며,container는 현재 작업 중인 객체를 가리키는 참조 변수입니다.split('.')을 호출하면 keys 문자열이 ['details1', 'details2', 'details3', 'details4', 'details5'] 배열로 분리됩니다.map()이 각 키를 순회하면서container[k]에 새로운 빈 객체({})를 할당하고, container 참조를 그 하위 객체로 이동시킵니다.- 마지막 키에 도달하면(
i == values.length - 1) 빈 객체 대신 firsName 값("David")을 할당하여 중첩 구조를 완성합니다.
실행 방법
위 프로그램을 실행하려면 다음 명령어를 사용합니다.
node fileName.js
여기서는 파일 이름이 demo227.js라고 가정합니다.
출력 결과
실행 결과는 다음과 같습니다.
PS C:\Users\Amit\JavaScript-code> node demo227.js
{
"details1": {
"details2": {
"details3": {
"details4": {
"details5": "David"
}
}
}
}
}