मान लीजिए कि हमारे पास निम्नलिखित नेस्टेड JSON ऑब्जेक्ट है -
const obj = { id: 1, title: 'hello world', child: { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, foo: { id: null, title: 'i should be in results array too!' }, deep: [ { id: null, value: 'yo' }, { id: null, value: 'yo2' } ] };
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता होती है जो एक ऐसी वस्तु को पहले तर्क के रूप में लेता है, एक कुंजी स्ट्रिंग को दूसरे के रूप में और एक मान स्ट्रिंग को तीसरे तर्क के रूप में लेता है। फ़ंक्शन को JSON ऑब्जेक्ट में दिए गए कुंजी मान युग्म की जांच करनी चाहिए।
यदि कोई वस्तु मौजूद है तो फ़ंक्शन को ऐसी सभी वस्तुओं की एक सरणी वापस करनी चाहिए।
इस समस्या को हल करने के लिए हम निम्नलिखित दृष्टिकोण का उपयोग करेंगे -
- यदि खोजा गया आइटम गलत है या यदि यह कोई वस्तु नहीं है, तो हम वापस आ जाते हैं
- यदि कुंजी और मान मेल खाते हैं, तो हम वास्तविक वस्तु को परिणाम सेट में जोड़ देते हैं,
- हम कुंजियाँ प्राप्त करते हैं और गुणों पर पुनरावृति करते हैं और फ़ंक्शन को फिर से कॉल करते हैं।
अंत में, हम एकत्रित वस्तुओं के साथ सरणी लौटाते हैं।
उदाहरण
const obj = { id: 1, title: 'hello world', child: { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, foo: { id: null, title: 'i should be in results array too!' }, deep: [ { id: null, value: 'yo' }, { id: null, value: 'yo2' } ] }; const findObject = (obj = {}, key, value) => { const result = []; const recursiveSearch = (obj = {}) => { if (!obj || typeof obj !== 'object') { return; }; if (obj[key] === value){ result.push(obj); }; Object.keys(obj).forEach(function (k) { recursiveSearch(obj[k]); }); } recursiveSearch(obj); return result; } console.log(findObject(obj, 'id', null));
आउटपुट
[ { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, { id: null, title: 'i should be in results array ' }, { id: null, title: 'i should be in results array too!' }, { id: null, value: 'yo' }, { id: null, value: 'yo2' } ]