다른 개체가 속성 값인 개체가 있으며 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 ]