मान लीजिए, हमारे पास एक ऑब्जेक्ट है जिसके प्रॉपर्टी वैल्यू में अन्य ऑब्जेक्ट्स हैं, यह 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
}
}
}
हमारा काम एक फ़ंक्शन लिखना है जो इस ऑब्जेक्ट और एक स्ट्रिंग को स्वीकार करता है, पूरे ऑब्जेक्ट में उस स्ट्रिंग को key के रूप में खोजता है और एक ऐरे लौटाता है जिसमें उन सभी कीज के मान हों जो स्ट्रिंग से मेल खाते हैं।
आइए फ़ंक्शन को 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 मुख्य ऑब्जेक्ट के अंदर चाइल्ड ऑब्जेक्ट्स की संख्या है और n नेस्टिंग का सबसे गहरा स्तर है।