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

JavaScript - एक अनुक्रम से मानों के समूह को हटाने के सभी संभावित तरीके निर्धारित करें


हमें एक JavaScript फ़ंक्शन लिखना आवश्यक है जो यह निर्धारित करता है कि हम एक अनुक्रम से मानों के एक समूह को कितने अलग-अलग तरीकों से हटा सकते हैं, मूल अनुक्रम को क्रम में छोड़कर (स्थिर), और यह सुनिश्चित करते हुए कि मूल अनुक्रम से प्रत्येक मान का केवल एक उदाहरण हटाया जाए।

उदाहरण के लिए − यदि अनुक्रम सरणी है −

const arr = [1, 2, 1, 3, 1, 4, 4];

और हटाई जाने वाली सरणी है −

const arr2 = [1, 4, 4];

तो क्रम को बाधित किए बिना ऐसा करने के तीन संभावित तरीके हैं −

1 --> [2, 1, 3, 1] 2 --> [1, 2, 3, 1] 3 --> [1, 2, 1, 3]

इसलिए, हमारे फ़ंक्शन को इन अनुक्रमों के लिए 3 आउटपुट करना चाहिए।

उदाहरण

const arr = [1, 2, 1, 3, 1, 4, 4]; const arr2 = [1, 4, 4]; const possibleRemovalCombinations = (original, part) => {     const sorter = (a, b) => a - b;     part.sort(sorter);     let place = [];     part.forEach(el => {       place[el] = []     });     original.forEach((el, index) => {       if(place[el]){         place[el].push(index);       }     });     let connection = part.map(el => place[el].slice());     for(let i = 1; i < connection.length; i++){       if (part[i - 1] != part[i]){         continue;       }       let left = connection[i - 1][0];       while(connection[i][0] <= left){         connection[i].shift();       };     };     for (let i = connection.length - 2; i >= 0; i--) {       if(part[i] != part[i + 1]){         continue;       }       let right = connection[i + 1][connection[i + 1].length - 1];       while(connection[i][connection[i].length - 1] >= right){         connection[i].pop();       };     };     const combineArray = (step, prev, combination) => {       for (let i = 0; i < connection[step].length; i++) {         let curr = connection[step][i];         if(prev >= curr && original[prev] == original[curr]){           continue;         }         if(step + 1 == connection.length){           combinations.push(combination.concat([curr]))         }         else {           combineArray(step + 1, curr, combination.concat([curr]));         };       };     };     let combinations = [], res = [];     combineArray(0, -1, []);     for (let i = 0; i < combinations.length; i++) {       let copy = original.slice();       combinations[i].forEach(el => copy[el]);       res[i] = copy.filter(el => el !== undefined);     };     return res.length; }; console.log(possibleRemovalCombinations(arr, arr2));

आउटपुट

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

3

  1. - जावास्क्रिप्ट में सरणी से फाल्सी वैल्यूज कैसे हटाएं?

    जावास्क्रिप्ट लाइब्रेरी underscore.js ने सरणी में सभी false मानों को हटाने के लिए _.compact() मेथड प्रदान किया है। सरणी में फाल्सी मान NaN, undefined, खाली स्ट्रिंग, false और 0 हैं। यह फाल्सी मानों से मुक्त एक नई सरणी आउटपुट के रूप में लौटाता है। सिंटैक्स _.compact( array ); यह एक सरणी को पैरामीटर

  1. - JavaScript में स्ट्रिंग को विभाजित करने के कितने तरीके हैं

    JavaScript में, हम विभाजित कर सकते हैं एक स्ट्रिंग को 3 तरीकों से। एक पुराना तरीका है जिसमें string.split() मेथड का उपयोग किया जाता है और बाद में, ES6 ने स्ट्रिंग को विभाजित करने के 2 और तरीके प्रदान किए हैं। पहले तरीके में स्प्रेड ऑपरेटर का उपयोग किया जाता है और दूसरे तरीके में Array.from() मेथड क

  1. जावास्क्रिप्ट में कंस्ट्रक्टर से मान वापस करना जावास्क्रिप्ट में कंस्ट्रक्टर से मान वापस करना

    परिचय जावास्क्रिप्ट में, एक कंस्ट्रक्टर फ़ंक्शन डिफ़ॉल्ट रूप से नवनिर्मित this ऑब्जेक्ट को लौटाता है। हालांकि, यदि कंस्ट्रक्टर स्पष्ट रूप से एक ऑब्जेक्ट लौटाता है (नॉन-प्रिमिटिव), तो वह ऑब्जेक्ट this के बजाय लौटाया जाता है। प्रिमिटिव मान (स्ट्रिंग, नंबर, बूलियन) लौटाने पर नजरअंदाज कर दिया जाता है।