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

जावास्क्रिप्ट में उप-सरणी विलय करना

<घंटा/>

मान लीजिए, हमारे पास सरणियों की एक सरणी है जिसमें इस तरह के कुछ लोगों के नाम और ईमेल के बारे में जानकारी है -

const arr = [
   ["John", "[email protected]", "[email protected]"],
   ["John", "[email protected]"],
   ["John", "[email protected]", "[email protected]"],
   ["Mary", "[email protected]"]
];

सरणी का प्रत्येक तत्व स्ट्रिंग्स का एक उप-सरणी है, जहां पहला तत्व एक नाम है, और शेष तत्व उस नाम से संबंधित ईमेल हैं।

अब, हम इन सबएरे को मर्ज करना चाहेंगे। यदि कोई ईमेल है जो दोनों उप-सरणी के लिए समान है, तो दो उप-सरणी निश्चित रूप से एक ही व्यक्ति से संबंधित हैं।

ध्यान दें कि भले ही दो उपसरणियों का एक ही नाम हो, वे अलग-अलग लोगों से संबंधित हो सकते हैं क्योंकि लोगों का एक ही नाम हो सकता है।

एक व्यक्ति के शुरू में कितने भी खाते हो सकते हैं, लेकिन उनके सभी खातों का नाम निश्चित रूप से एक ही होता है।

सबएरे को मर्ज करने के बाद, हमें उन्हें निम्नलिखित प्रारूप में वापस करने की आवश्यकता है - प्रत्येक सबएरे का पहला तत्व नाम है, और शेष तत्व क्रमबद्ध क्रम में ईमेल हैं। उप-सरणी स्वयं को किसी भी क्रम में वापस किया जा सकता है।

इसलिए, उपरोक्त सरणी के लिए, आउटपुट इस तरह दिखना चाहिए -

const output = [
   ["John", '[email protected]', '[email protected]',
   '[email protected]'],
   ["John", "[email protected]"],
   ["Mary", "[email protected]"]
];

उदाहरण

इसके लिए कोड होगा -

const arr = [
   ["John", "[email protected]", "[email protected]"],
   ["John", "[email protected]"],
   ["John", "[email protected]", "[email protected]"],
   ["Mary", "[email protected]"]
];
const recusiveMatch = (included, i, tmp, arr, res) => {
   for(let j = 1; j < arr[i].length; j += 1) {
      let currentEmail = arr[i][j];
      if(included.has(currentEmail)) continue;
      res.push(currentEmail);
      included.add(currentEmail);
      let currentAccountIndexes = tmp.get(currentEmail);
      for(let c = 0; c < currentAccountIndexes.length; c += 1) {
         let currentIndex = currentAccountIndexes[c];
         if(i !== currentIndex) {
            recusiveMatch(included, currentIndex, tmp, arr, res);
         }
      }
   }
};
const merge = (arr) => {
   const tmp = new Map(),
   included = new Set(),
   res = [];
   arr.forEach((account, i) => {
      for(let u = 1; u < account.length; u += 1) {
         let currentEMail = account[u];
         tmp.set(currentEMail, tmp.get(currentEMail) || []);
         tmp.get(currentEMail).push(i);
      }
   });
   arr.forEach((account, i) => {
      if(!included.has(arr[1])) {
         let u = [];
         recusiveMatch(included, i, tmp, arr, u);
         if(u.length) {
            res.push(u);
            u.sort();
            u.unshift(account[0]);
         }
      }
   });
   return res;
};
console.log(merge(arr));

आउटपुट

और कंसोल में आउटपुट होगा -

[
   [
      'John',
      '[email protected]',
      '[email protected]',
      '[email protected]'
   ],
   [ 'John', '[email protected]' ],
   [ 'Mary', '[email protected]' ]
]

  1. जावास्क्रिप्ट डेटा व्यू ()

    JavaScript DataView हमें निम्न स्तर का इंटरफ़ेस प्रदान करके बाइनरी ArrayBuffer में कई प्रकार की संख्याओं को पढ़ने और लिखने की अनुमति देता है। हम DataView() का उपयोग किए बिना सीधे ArrayBuffer में हेरफेर नहीं कर सकते। JavaScript DataView को लागू करने के लिए कोड निम्नलिखित है - उदाहरण दस्तावेज़ बॉडी {

  1. जावास्क्रिप्ट चलो

    2015 में पेश किया गया जावास्क्रिप्ट लेट कीवर्ड हमें ब्लॉक स्कोप्ड वेरिएबल्स को परिभाषित करने की अनुमति देता है। जावास्क्रिप्ट में Let कीवर्ड का उपयोग करके वेरिएबल घोषित करने के लिए कोड निम्नलिखित है - उदाहरण दस्तावेज़ बॉडी { फॉन्ट-फ़ैमिली:सेगो यूआई, ताहोमा, जिनेवा, वर्दाना, सेन्स-सेरिफ़; } .नमूना{

  1. जावास्क्रिप्ट रैंडम

    Math.random() फ़ंक्शन का उपयोग 0 और 1 के बीच एक यादृच्छिक फ़्लोटिंग-पॉइंट संख्या उत्पन्न करने के लिए किया जाता है। Math.random() फ़ंक्शन के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="