जावास्क्रिप्ट में एक बटरफ्लाई शफल्ड एरे नंबरों का एक एरे है जिसे इस तरह सॉर्ट किया जाता है कि संख्याएं घटती हैं जैसे ही हम एरे के केंद्र के पास पहुंचते हैं और बढ़ती हैं जैसे ही हम एरे के अंत के पास पहुंचते हैं। सबसे बड़ी संख्या सबसे पहले इंडेक्स पर रखी जाती है।
बटरफ्लाई शफल्ड एरे का एक और रूप है जहां संख्याएं केंद्र की ओर बढ़ती हैं और अंत की ओर घटती हैं। इस मामले में सबसे छोटी संख्या सबसे पहले इंडेक्स पर रखी जाती है।
गणित की पृष्ठभूमि वाले लोगों के लिए, यह कुछ हद तक गौसियन वितरण से संबंधित है।
उदाहरण
मान लीजिए हमारे पास यह एरे है -
const arr = [8,2,6,3,9,1,4,5,0,7];
यदि हम इस पर बटरफ्लाई शफलिंग लागू करते हैं, तो आउटपुट होगा -
[9, 7, 5, 3, 1,0, 2, 4, 6, 8]
देखें कैसे सबसे बड़ी और दूसरी सबसे बड़ी संख्याएं चरम छोर पर रखी गई हैं और सबसे छोटी संख्या केंद्र में।
एक और संभावना हो सकती है -
[0, 2, 4, 6, 8, 9, 7, 5, 3, 1]
हमारा काम एक फ़ंक्शन लिखना है जो नंबरों का एक एरे लेता है और दूसरे आर्गुमेंट के रूप में एक स्ट्रिंग, स्ट्रिंग 'asc' या 'des' दो मानों में से कोई भी ले सकती है। -
यदि स्ट्रिंग 'des' है तो हमें एरे को बढ़ते से घटते क्रम में शफल करना है।
यदि यह 'asc' है तो हमें एरे को घटते से बढ़ते क्रम में शफल करना है।
दृष्टिकोण
यदि स्ट्रिंग 'asc' है तो हम शुरुआत में एरे को आरोही क्रम में सॉर्ट करते हैं अन्यथा अवरोही क्रम में। तो, मान लीजिए फ़ंक्शन को 'asc' के साथ कॉल किया गया था, तो एरे अब ऐसा दिखेगा -
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
फिर हम एरे को दो एरे में विभाजित करते हैं जैसे कि आसन्न तत्व विपरीत एरे में वितरित होते हैं। हम एक एरे में तत्वों को पुश करते हैं जबकि हम उन्हें दूसरे में अनशिफ्ट करते हैं, ताकि एक एरे हमें मैन्युअली ऐसा किए बिना उल्टा हो जाए।
इस प्रकार बने दो एरे इस तरह दिखेंगे -
[ 0, 2, 4, 6, 8 ] [ 9, 7, 5, 3, 1 ]
अब अंतिम चरण इन एरे को जोड़ना है और जिसके बाद हमें हमारा आवश्यक एरे मिल जाएगा। यह सब जब कोड में डाला जाता है तो कुछ ऐसा दिखेगा -
उदाहरण
const array = [8,2,6,3,9,1,4,5,0,7]; const butterflyShuffle = (array, order = 'asc') => { //मूल एरे को म्यूटेट न करने के लिए एरे की एक नई कॉपी बनाना const arr = array.slice(); //आर्गुमेंट के आधार पर आरोही या अवरोही क्रम में सॉर्ट करना arr.sort((a, b) => order === 'asc' ? a-b : b-a); const first = [], second = []; //यह वेरिएबल बाद में यह निर्धारित करने में मदद करेगा कि कौन सा एरे उल्टा करना है //और किसे किससे जोड़ना है //यदि लंबाई सम है, तो इसका मतलब है कि अंतिम तत्व दूसरे एरे में जाएगा //अन्यथा यह पहले एरे में जाएगा const isEven = arr.length % 2 === 0; for (let i = 0; i < arr.length; i++){ if(i % 2 === 0){ isEven ? first.push(arr[i]) : first.unshift(arr[i]); continue; }; isEven ? second.unshift(arr[i]) : second.push(arr[i]); }; return isEven ? second.concat(first) : first.concat(second); }; console.log(butterflyShuffle(array)); console.log(butterflyShuffle(array, 'des'));आउटपुट
कंसोल में आउटपुट होगा -
[ 9, 7, 5, 3, 1, 0, 2, 4, 6, 8 ] [ 0, 2, 4, 6, 8, 9, 7, 5, 3, 1 ]