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