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