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