Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript में नेस्टेड ऑब्जेक्ट से की-वैल्यू कैसे निकालें?

नेस्टेड ऑब्जेक्ट में for...in लूप या रिकर्सिव फंक्शन से विशिष्ट मान वाली कुंजी ढूंढें।

डेटा

const details = {
    "teacherDetails": {
        "teacherName": ["John", "David"]
    },
    "subjectDetails": {
        "subjectName": ["MongoDB", "Java"]
    }
};

विधि 1: नेस्टेड for...in लूप

const searchValue = "Java";
let foundKey = null;
let foundParentKey = null;

for (const parentKey in details) {
    const nested = details[parentKey];
    for (const childKey in nested) {
        if (nested[childKey].includes(searchValue)) {
            foundParentKey = parentKey;
            foundKey = childKey;
            break;
        }
    }
    if (foundKey) break;
}

console.log(`${foundParentKey}, ${foundKey}`); 
// "subjectDetails, subjectName"

विधि 2: Object.entries + find (मॉडर्न)

function findKeyPath(obj, searchValue) {
    for (const [parentKey, parentVal] of Object.entries(obj)) {
        for (const [childKey, childVal] of Object.entries(parentVal)) {
            if (Array.isArray(childVal) && childVal.includes(searchValue)) {
                return { parentKey, childKey };
            }
        }
    }
    return null;
}

console.log(findKeyPath(details, "Java"));
// { parentKey: 'subjectDetails', childKey: 'subjectName' }

विधि 3: रिकर्सिव (किसी भी गहराई के लिए)

function findKeyDeep(obj, target, path = []) {
    if (obj === null || typeof obj !== 'object') return null;
    
    // ऐरे में खोजें
    if (Array.isArray(obj)) {
        if (obj.includes(target)) return path;
        return null;
    }
    
    // ऑब्जेक्ट की कुंजियों में खोजें
    for (const [key, value] of Object.entries(obj)) {
        const result = findKeyDeep(value, target, [...path, key]);
        if (result) return result;
    }
    
    return null;
}

console.log(findKeyDeep(details, "Java")); 
// [ 'subjectDetails', 'subjectName' ]

console.log(findKeyDeep(details, "David")); 
// [ 'teacherDetails', 'teacherName' ]

विधि 4: फ्लैट मैप (सरल मामलों के लिए)

const entries = Object.entries(details).flatMap(([parentKey, parentVal]) => 
    Object.entries(parentVal).map(([childKey, childVal]) => ({
        parentKey, childKey, value: childVal
    }))
);

const found = entries.find(e => e.value.includes("Java"));
console.log(found); // { parentKey: 'subjectDetails', childKey: 'subjectName', value: [...] }

चलाने का तरीका

node nested-object-key.js

आउटपुट

subjectDetails, subjectName

सारांश

विधिउपयोग केस
नेस्टेड for...inज्ञात 2-लेवल स्ट्रक्चर
Object.entries + findक्लीनर, मॉडर्न
रिकर्सिवअज्ञात/चर गहराई
flatMapवन-लाइनर, सिंपल स्ट्रक्चर
  1. - JavaScript में पास बाय वैल्यू समझाएं?

    JavaScript एक पास-बाय-वैल्यू भाषा है। लेकिन ऑब्जेक्ट्स के लिए, वैल्यू उनका रेफरेंस होती है। इसलिए उदाहरण के लिए, यदि आप एक int को पैरामीटर के रूप में फ़ंक्शन में पास करते हैं और फ़ंक्शन में इसके मान को बढ़ाते हैं, तो इसका मान कॉलर के संदर्भ में अपडेट नहीं होगा: उदाहरण let i = 0; function increment(

  1. - JavaScript में वेरिएबल वैल्यू से ऑब्जेक्ट प्रॉपर्टी कैसे बनाएं?

    JS में ऑब्जेक्ट प्रॉपर्टीज़ बनाने के लिए 2 नोटेशन्स हैं: डॉट नोटेशन और ब्रैकेट नोटेशन। किसी वेरिएबल से ऑब्जेक्ट प्रॉपर्टी बनाने के लिए, आपको निम्न तरीके से ब्रैकेट नोटेशन का उपयोग करने की आवश्यकता है: उदाहरण const obj = {a: foo} const prop = bar // prop वेरिएबल नाम का उपयोग करके प्रॉपर्टी bar सेट क

  1. JavaScript में वेरिएबल से ऑब्जेक्ट की सेट करें JavaScript में वेरिएबल से ऑब्जेक्ट की सेट करें

    वेरिएबल से ऑब्जेक्ट की सेट करने के लिए कोड निम्न है -उदाहरण<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title&g