जावास्क्रिप्ट में एक तितली फेरबदल सरणी संख्याओं की एक सरणी है जिसे इस तरह क्रमबद्ध किया जाता है कि जैसे ही हम सरणी के केंद्र में पहुंचते हैं और जैसे-जैसे हम सरणी के अंत तक पहुंचते हैं, संख्या घटती जाती है। सबसे बड़ी संख्या को पहले सूचकांक में रखा गया है।
बटरफ्लाई शफ़ल्ड एरे का एक और रूपांतर है जहाँ संख्याएँ केंद्र की ओर बढ़ती हैं और अंत की ओर घटती हैं। इस मामले में सबसे छोटी संख्या को पहले सूचकांक में रखा गया है।
जो लोग गणित की पृष्ठभूमि से आते हैं, उनके लिए यह कुछ हद तक गुआसी और वितरण से संबंधित है।
उदाहरण
मान लीजिए हमारे पास यह सरणी है -
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') => { //creating a new copy of array so that we dont mutate the original array const arr = array.slice(); //sorting ascending or descending based on the argument arr.sort((a, b) => order === 'asc' ? a-b : b-a); const first = [], second = []; //this variable will later help in determining which array is to be reversed //and which one is to be concatenated to which //if length is even, it means that last element will go in second array //otherwise it will go in first array 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 ]