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

JavaScript में सबएरे मर्ज करना


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

const arr = [    ["John", "johnsmith@mail.com", "john00@mail.com"],    ["John", "johnnybravo@mail.com"],    ["John", "johnsmith@mail.com", "john_newyork@mail.com"],    ["Mary", "mary@mail.com"] ];

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

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

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

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

सबएरे को मर्ज करने के बाद, हमें उन्हें निम्नलिखित प्रारूप में लौटाना होगा - प्रत्येक सबएरे का पहला तत्व नाम है, और बाकी तत्व सॉर्ट क्रम में ईमेल हैं। सबएरे स्वयं किसी भी क्रम में लौटाए जा सकते हैं।

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

const output = [    ["John", 'john00@mail.com', 'john_newyork@mail.com',    'johnsmith@mail.com'],    ["John", "johnnybravo@mail.com"],    ["Mary", "mary@mail.com"] ];

उदाहरण

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

const arr = [    ["John", "johnsmith@mail.com", "john00@mail.com"],    ["John", "johnnybravo@mail.com"],    ["John", "johnsmith@mail.com", "john_newyork@mail.com"],    ["Mary", "mary@mail.com"] ]; 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',       'john00@mail.com',       'john_newyork@mail.com',       'johnsmith@mail.com'    ],    [ 'John', 'johnnybravo@mail.com' ],    [ 'Mary', 'mary@mail.com' ] ]

  1. JavaScript DataView: ArrayBuffer पर लो-लेवल बाइनरी एक्सेस JavaScript DataView: ArrayBuffer पर लो-लेवल बाइनरी एक्सेस

    DataView एक लो-लेवल इंटरफेस है जो ArrayBuffer (कच्चे बाइनरी डेटा का निश्चित-लंबाई कंटेनर) को पढ़ने/लिखने के लिए कई संख्या प्रकारों (Int8, Uint16, Float32, आदि) में अनुमति देता है। एंडियननेस नियंत्रण प्रदान करता है। उदाहरण { // बाइनरी में पढ़ें fillEle.innerHTML = बाइनरी: + view.g

  1. JavaScript Let कीवर्ड JavaScript Let कीवर्ड

    2015 में पेश किया गया JavaScript Let कीवर्ड हमें ब्लॉक-स्कोप्ड वेरिएबल परिभाषित करने की अनुमति देता है।उदाहरण<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale

  1. JavaScript Random नंबर JavaScript Random नंबर

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