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'));

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

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

이 코드에 대한 콘솔의 출력은 -

입니다.
[ 31, 22, 26 ]