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

JavaScript में Ruby के each_cons के समकक्ष


each_cons() - Ruby

each_cons() एन्यूमरेबल का मेथड रूबी में एक इनबिल्ट मेथड है जो हर बार प्रत्येक तत्व से शुरू होने वाले लगातार N तत्वों के लिए पुनरावृति करता है। यदि कोई ब्लॉक नहीं दिया गया है, तो यह एन्यूमरेटर लौटाता है।

each_cons() का JS समकक्ष

मान लीजिए हमारे पास नंबर लिटरल्स का एक एरे है (इस मामले में रूबी के एन्यूमरेबल का JS समकक्ष), each_cons फ़ंक्शन एक एरे फ़ंक्शन माना जाता है जो एरे के प्रत्येक तत्व के लिए निष्पादित होता है और एकमात्र आर्गुमेंट के रूप में एक नंबर N (N <= एरे की लंबाई) स्वीकार करता है। और N आकार के सबएरे के साथ एक एरे लौटाता है जिसमें प्रत्येक सबएरे मूल एरे के सभी तत्वों से एक-एक करके शुरू होता है।

इसका एक उदाहरण चीजों को थोड़ा स्पष्ट कर देगा।

मान लीजिए हमारे पास ऐसा एरे है -

const arr = [1, 2, 3, 4, 5]; console.log(arr.eachCons(2));

eachCons की इस कॉल का मतलब है कि, यह 2 तत्वों वाले एरे का एक एरे बनाता है जैसे -

[[1, 2], [2, 3], [3, 4], [4, 5]]

ध्यान दें कि सबएरे मूल एरे के प्रत्येक तत्व के लिए तब तक बनाए जाते हैं जब तक हम ऐसा कर सकते हैं।

यदि N का मान 2 के बजाय 3 होता, तो परिणाम ऐसा दिखता -

[[1, 2, 3], [2, 3, 4], [3, 4, 5]]

फिर से, सबएरे एरे के प्रत्येक तत्व के लिए तब तक बनाए जाते हैं जब तक हमारे पास एरे में पर्याप्त तत्व हैं।

दृष्टिकोण

हम इस समस्या को हल करने के लिए स्लाइडिंग विंडो एल्गोरिदम का उपयोग करेंगे।

हालांकि हम आधुनिक ES6 फ़ंक्शन का उपयोग करके इसे दो लाइनों में हल कर सकते हैं, लेकिन पूर्व दृष्टिकोण बाद की तुलना में बहुत कुशल है।

सबसे पहले, हम एक व्हाइल लूप का उपयोग करेंगे जो 0 से N इंडेक्स तक हमारी प्रारंभिक विंडो बनाता है। फिर हम एक फॉर लूप का उपयोग करेंगे जो तब तक चलता है जब तक हमारी विंडो का अंत मूल एरे की लंबाई से कम है।

यह लूप हमारी विंडो की स्थिरता की जांच करता है (यानी, हमारी विंडो की लंबाई N के बराबर होना)। यदि विंडो स्थिर है, तो हम विंडो (वह सबएरे परिणाम एरे में डालते हैं), इसे यूनिट दूरी से दाईं ओर स्लाइड करते हैं और इसे संकुचित करते हैं (यानी, start = end)। यदि विंडो अस्थिर है, तो हम इसमें तत्व जोड़ते रहते हैं।

इस दृष्टिकोण के लिए कोड है -

उदाहरण

const arr = [1, 2, 3, 4, 5]; const eachCons = function(num){    let res = [], temp = [];    let start = 0, end = 0;    while(end < num){       temp.push(this[end++]);    };    for(; end <= this.length ;){       if(temp.length === num){          res.push(temp);          start++;          end = start;          temp = [];       }       temp[end-start] = this[end];       end++;    }    return res; }; Array.prototype.eachCons = eachCons; console.log([1, 2, 3, 4, 5].eachCons(1)); console.log([1, 2, 3, 4, 5].eachCons(2)); console.log([1, 2, 3, 4, 5].eachCons(3)); console.log([1, 2, 3, 4, 5].eachCons(4));

आउटपुट

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

[ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ] [ [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 4, 5 ] ] [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 5 ] ] [ [ 1, 2, 3, 4 ], [ 2, 3, 4, 5 ] ]

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

    प्रत्येक ऑब्जेक्ट के लिए यूनिक ID बनाने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Docum

  1. JavaScript में प्रत्येक नोड के लिए अगला बड़ा नोड खोजना JavaScript में प्रत्येक नोड के लिए अगला बड़ा नोड खोजना

    समस्या हमें एक JavaScript फ़ंक्शन लिखना है जो लिंक्ड लिस्ट के हेड को पहले और एकमात्र आर्गुमेंट के रूप में लेता है। node_i.val, और j सबसे छोटा संभव विकल्प है। यदि ऐसा j मौजूद नहीं है, तो अगला बड़ा मान 0 है। हमारे फ़ंक्शन को एक सरणी तैयार करके वापस करनी चाहिए जिसमें संबंधित तत्व सूची में तत्व के लिए

  1. - रूबी के Enumerable मॉड्यूल में महारत: शक्तिशाली कलेक्शन मेथड्स अनलॉक करें

    रूबी मैजिक के एक और एपिसोड का समय! इस बार, हम रूबी की सबसे जादुई विशेषताओं में से एक को देखेंगे, जो उन अधिकांश मेथड्स को प्रदान करती है जिनका आप रूबी की एन्युमरेबल क्लासेस जैसे Array, Hash और Range के साथ काम करते समय उपयोग करेंगे। इस प्रक्रिया में, हम सीखेंगे कि आप एन्युमरेबल ऑब्जेक्ट्स के साथ क्या