Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 객체 키와 값 뒤집기 – 역방향 객체 매핑 구현 방법

JavaScript에서 객체의 키(key)와 값(value)을 서로 뒤바꾸는 역방향 매핑(reverse mapping)이 필요한 경우가 종종 있습니다. 이번 글에서는 객체를 인자로 받아, 원래 객체의 값이 키가 되고 키가 값이 되는 새로운 객체를 반환하는 reverseObject() 함수를 작성해 보겠습니다.

접근 방법은 간단합니다. Object.keys()로 원본 객체의 모든 키를 순회하면서, 기존의 '키-값' 쌍을 새 객체에는 '값-키' 쌍으로 저장하는 것입니다.

여기서 한 가지 주의할 점은, 서로 다른 키가 같은 값을 가질 수 있다는 것입니다. 예를 들어 여러 도시가 같은 주(state)에 속할 수 있죠. 따라서 새 객체의 값은 단일 문자열이 아니라 키들의 배열로 관리하는 것이 안전합니다. 해당 값이 이미 존재하면 배열에 키를 추가(push)하고, 없으면 새 배열을 생성하면 됩니다.

예제 코드

const cities = {
  'Jodhpur': 'Rajasthan',
  'Alwar': 'Rajasthan',
  'Mumbai': 'Maharasthra',
  'Ahemdabad': 'Gujrat',
  'Pune': 'Maharasthra'
};

const reverseObject = (obj) => {
  const newObj = {};
  Object.keys(obj).forEach(key => {
    if(newObj[obj[key]]){
      newObj[obj[key]].push(key);
    }else{
      newObj[obj[key]] = [key];
    }
  });
  return newObj;
};

console.log(reverseObject(cities));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

{
  Rajasthan: [ 'Jodhpur', 'Alwar' ],
  Maharasthra: [ 'Mumbai', 'Pune' ],
  Gujrat: [ 'Ahemdabad' ]
}

코드 동작 원리

reverseObject() 함수는 먼저 빈 객체 newObj를 생성한 뒤, Object.keys(obj)로 얻은 각 키를 순회합니다. 순회 과정에서 현재 키에 대응하는 값 obj[key]를 확인하고, 이 값이 newObj에 이미 등록되어 있다면 기존 배열에 현재 키를 추가하고, 그렇지 않다면 현재 키를 첫 요소로 하는 새 배열을 만듭니다.

그 결과, 같은 값을 공유하는 키들이 하나의 배열로 묶인 역방향 매핑 객체가 완성됩니다. 이 패턴은 조건에 따른 데이터 그룹화(grouping) 작업에서도 널리 활용되므로, 실무에서 유용하게 응용할 수 있습니다.