Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

중첩된 객체 키 JavaScript를 재귀적으로 나열

<시간/>

다른 개체가 속성 값인 개체가 있다고 가정해 보겠습니다. 개체는 2-3개 레벨 또는 그 이상으로 중첩되어 있습니다.

다음은 샘플 개체입니다 -

const people = {
   Ram: {
      fullName: 'Ram Kumar',
      details: {
         age: 31,
         isEmployed: true
      }
   },
   Sourav: {
      fullName: 'Sourav Singh',
      details: {
         age: 22,
         isEmployed: false
      }
   },
   Jay: {
      fullName: 'Jay Grewal',
      details: {
         age: 26,
         isEmployed: true
      }
   }
}

우리의 임무는 이 객체와 문자열을 받아들이고 해당 문자열에 대한 전체 객체를 키로 검색하고 문자열과 일치하는 모든 키의 값을 포함하는 배열을 반환하는 함수를 작성하는 것입니다.

recursiveSearch() 함수를 호출해 보겠습니다. 중첩이 주어지면 재귀가 이 상황을 해결하는 가장 적절한 방법이 될 것입니다.

따라서 이 함수 recursiveSearch()의 전체 코드는 -

예시

const people = {
   Ram: {
      fullName: 'Ram Kumar',
      details: {
         age: 31,
         isEmployed: true
      }
   },
   Sourav: {
      fullName: 'Sourav Singh',
      details: {
         age: 22,
         isEmployed: false
      }
   },
   Jay: {
      fullName: 'Jay Grewal',
      details: {
         age: 26,
         isEmployed: true
      }
   }
}
const recursiveSearch = (obj, searchKey, results = []) => {
   const r = results;
   Object.keys(obj).forEach(key => {
      const value = obj[key];
      if(key === searchKey && typeof value !== 'object'){
         r.push(value);
      }else if(typeof value === 'object'){
         recursiveSearch(value, searchKey, r);
      }
   });
   return r;
};
console.log(recursiveSearch(people, 'age'));

출력

콘솔의 출력은 -

[ 31, 22, 26 ]

위의 함수에서 우선 주 객체를 반복하고 중첩이 발생할 때마다 원하는 키에 대한 하위 객체 검색을 재귀적으로 반복합니다. 원하는 키를 찾으면 즉시 결과 배열과 위치에 값을 기록합니다. 마지막으로 반복을 완료하면 원하는 값이 포함된 결과 배열을 반환합니다.

이 함수의 시간 복잡도는 O(mn)이며, 여기서 는 주 개체 내부의 자식 개체 수이고 m은 가장 깊은 중첩 수준입니다.