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

JavaScript में दो ऐरे कन्कैट किए बिना उच्च मान वाले ऑब्जेक्ट्स कैसे प्राप्त करें?

reduce() का उपयोग करके दोनों ऐरे को एक साथ प्रोसेस करें, प्रत्येक नाम के लिए उच्चतम मान वाला ऑब्जेक्ट रखें - कन्कैटनेशन की आवश्यकता नहीं।

डेटा

const sectionA = [
    { studentName: 'John', studentMarks: 78 },
    { studentName: 'David', studentMarks: 65 },
    { studentName: 'Bob', studentMarks: 98 }
];

const sectionB = [
    { studentName: 'John', studentMarks: 67 },
    { studentName: 'David', studentMarks: 89 },
    { studentName: 'Bob', studentMarks: 97 }
];

reduce() समाधान (कन्कैट के बिना)

function mergeByMax(arr1, arr2, key, valueKey) {
    // पहले ऐरे से मैप बनाएं
    const map = new Map();
    arr1.forEach(item => map.set(item[key], item));
    
    // दूसरे ऐरे से मर्ज करें - उच्च मान रखें
    arr2.forEach(item => {
        const existing = map.get(item[key]);
        if (!existing || item[valueKey] > existing[valueKey]) {
            map.set(item[key], item);
        }
    });
    
    return Array.from(map.values());
}

const result = mergeByMax(sectionA, sectionB, 'studentName', 'studentMarks');
console.log(result);

reduce() के साथ संक्षिप्त संस्करण

const mergeMax = (acc, item) => {
    const existing = acc.find(x => x.studentName === item.studentName);
    if (!existing || item.studentMarks > existing.studentMarks) {
        // मौजूदा को हटाएं और नया जोड़ें
        const idx = acc.indexOf(existing);
        if (idx !== -1) acc.splice(idx, 1);
        acc.push(item);
    }
    return acc;
};

const combined = [...sectionA, ...sectionB].reduce(mergeMax, []);
console.log(combined);

सिंगल reduce पास (दोनों ऐरे पर)

function combineSections(sectionA, sectionB) {
    const reducer = (acc, curr) => {
        const existing = acc[curr.studentName];
        if (!existing || curr.studentMarks > existing.studentMarks) {
            acc[curr.studentName] = curr;
        }
        return acc;
    };
    
    // दोनों ऐरे पर reduce चलाएं, एक ही एक्यूमुलेटर के साथ
    const merged = sectionA.reduce(reducer, {});
    sectionB.reduce(reducer, merged);
    
    return Object.values(merged);
}

console.log(combineSections(sectionA, sectionB));

आउटपुट

[
  { studentName: 'John', studentMarks: 78 },   // A से (78 > 67)
  { studentName: 'David', studentMarks: 89 },  // B से (89 > 65)
  { studentName: 'Bob', studentMarks: 98 }     // A से (98 > 97)
]

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

node merge-max.js

क्यों कन्कैट नहीं?

  • मेमोरी: बड़ी ऐरे के लिए मध्यवर्ती ऐरे नहीं बनती
  • प्रदर्शन: सिंगल पास, O(n) बनाम O(n) कन्कैट + O(n) प्रोसेस
  • स्ट्रीमिंग: डेटा चंक्स में आ सकता है, सभी एक साथ नहीं

जेनेरिक फंक्शन

function mergeArraysByKeyMax(...arrays) {
    const map = new Map();
    
    for (const arr of arrays) {
        for (const item of arr) {
            const key = item.studentName; // या पैरामीटर से
            const existing = map.get(key);
            if (!existing || item.studentMarks > existing.studentMarks) {
                map.set(key, item);
            }
        }
    }
    
    return Array.from(map.values());
}

// किसी भी संख्या में ऐरे
console.log(mergeArraysByKeyMax(sectionA, sectionB, sectionC, sectionD));
  1. JavaScript में सब-ऑब्जेक्ट्स और सरणियों वाले ऑब्जेक्ट को कैसे इम्पोर्ट करें? JavaScript में सब-ऑब्जेक्ट्स और सरणियों वाले ऑब्जेक्ट को कैसे इम्पोर्ट करें?

    JavaScript में सब-ऑब्जेक्ट्स और सरणियों वाले ऑब्जेक्ट को इम्पोर्ट करने का निम्नलिखिक कोड है:उदाहरण<!DOCTYPE html> <html lang="hi"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"

  1. JavaScript में XML डेटा से किसी भी एट्रिब्यूट का मान कैसे प्राप्त करें? JavaScript में XML डेटा से किसी भी एट्रिब्यूट का मान कैसे प्राप्त करें?

    jQuery के $(xmlString) से XML पार्स करें, फिर .attr() या .find() से एट्रिब्यूट्स/एलिमेंट्स एक्सेस करें। jQuery के साथ XML पार्सिंग <script src=https://code.jquery.com/jquery-3.6.0.min.js></script> <script> // XML स्ट्रिंग var xmlString = <Game id=101 details=Play the ga

  1. ऑब्जेक्ट रिकग्निशन खोजें: शीर्ष ऐप्स जो आपके फोन कैमरे को स्मार्ट पहचानकर्ता में बदल देते हैं ऑब्जेक्ट रिकग्निशन खोजें: शीर्ष ऐप्स जो आपके फोन कैमरे को स्मार्ट पहचानकर्ता में बदल देते हैं

    कैमरे वाला स्मार्टफोन अब तस्वीरें क्लिक करने का पारंपरिक घटक नहीं रह गया है। इसका उपयोग इससे कहीं अधिक रोमांचक चीजों के लिए किया जाता है जैसे छवियों को दिलचस्प बनाने के लिए AR स्टिकर्स का उपयोग करना। कोई चेहरे और इशारों को पहचानने के लिए कैमरे का उपयोग तस्वीर क्लिक करने के लिए कर सकता है। इसी तरह, अ