문제 상황
다음과 같은 JSON 객체가 있다고 가정해 보겠습니다. 각 카테고리(노트북, 데스크톱, 마우스, 키보드)는 제품 정보를 담은 객체 배열을 값으로 가지고 있습니다.
const obj = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}, {
"productId": "012"
}],
"KEY-BOARD": [{
"productId": "345"
}]
};여기서 필요한 것은 이러한 객체를 첫 번째 인수로, 그리고 키-값 쌍을 두 번째 인수로 받는 JavaScript 함수입니다.
키-값 쌍은 기본적으로 다음과 같은 형태의 객체입니다.
const pair = {"productId": "456"};이 함수는 객체 전체를 탐색하여 지정한 productId와 일치하는 항목이 속한 키를 찾아 반환해야 합니다.
예제 코드
위 요구 사항을 구현한 코드는 다음과 같습니다.
const obj = {
"LAPTOP": [{
"productId": "123"
}],
"DESKTOP": [{
"productId": "456"
}],
"MOUSE": [{
"productId": "789"
}, {
"productId": "012"
}],
"KEY-BOARD": [{
"productId": "345"
}]
};
const searchByPair = (obj = {}, pair = {}) => {
const toSearch = Object.values(pair)[0];
let required = undefined;
Object.keys(obj).forEach((key) => {
if(obj[key].find((pid) => pid.productId === toSearch)){
required = key;
}
});
return required;
};
console.log(searchByPair(obj, {
'productId': '123'
}));코드 동작 원리
함수의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
Object.values(pair)[0]를 통해 검색 대상인 productId 값을 추출합니다. 이어서 Object.keys(obj)로 객체의 모든 키(LAPTOP, DESKTOP 등)를 순회하면서, 각 키에 연결된 배열 안에서 find() 메서드로 일치하는 productId가 있는지 확인합니다. 일치하는 항목을 발견하면 해당 키를 저장하고, 최종적으로 그 키를 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
LAPTOP
참고 사항
코드에서 비교 시 엄격한 동등 연산자(===)를 사용하므로 자료형까지 정확히 일치해야 합니다. 예를 들어 데이터가 문자열 "456"으로 저장되어 있다면 숫자 456이 아닌 문자열 "456"으로 검색해야 올바른 결과를 얻을 수 있습니다. 실무에서는 자료형 불일치로 인한 검색 실패가 잦으니, 검색 전에 값의 자료형을 통일하는 것이 좋습니다.