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