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

JavaScript로 객체 배열에서 특정 키-값 찾기 완벽 가이드

문제 상황

다음과 같은 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"으로 검색해야 올바른 결과를 얻을 수 있습니다. 실무에서는 자료형 불일치로 인한 검색 실패가 잦으니, 검색 전에 값의 자료형을 통일하는 것이 좋습니다.