Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptでバタフライシャッフルを行う方法は?


JavaScriptのバタフライシャッフル配列は、配列の中心に近づくにつれて数値が減少し、配列の終わりに近づくにつれて数値が増加するように並べ替えられた数値の配列です。最大数は最初のインデックスに配置されます。

バタフライシャッフル配列の別のバリエーションは、数字が中央に向かって増加し、端に向かって減少する場合です。この場合、最小の番号が最初のインデックスに配置されます。

数学のバックグラウンドを持っている人にとって、それはGuassiandistributionにいくらか関係があります。

この配列があるとします-

const arr = [8,2,6,3,9,1,4,5,0,7];

バタフライシャッフルを適用すると、出力は-

になります。
[9, 7, 5, 3, 1,0, 2, 4, 6, 8]

最大数と2番目に大きい数が端に配置され、最小数が中央に配置される方法を確認してください。

別の可能性は-

である可能性があります
[0, 2, 4, 6, 8, 9, 7, 5, 3, 1]

私たちの仕事は、数値の配列と文字列を2番目の引数として受け取る関数を作成することです。文字列は、「asc」または「des」の2つの値のいずれかを取ることができます。 −

  • 文字列が「des」の場合、配列を昇順から降順でシャッフルする必要があります。

  • 「asc」の場合は、配列を降順から昇順にシャッフルする必要があります。

アプローチ

  • 文字列が「asc」の場合、最初は配列を昇順で並べ替えます。それ以外の場合は降順で並べ替えます。したがって、関数が「asc」で呼び出されたとすると、配列は次のようになります-

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 次に、隣接する要素が反対の配列に分散されるように、配列を2つの配列に分割します。一方の配列の要素をプッシュし、もう一方の配列のシフトを解除することで、手動でこれを行うことなく、一方の配列が反転されます。

このように形成された2つの配列は、次のようになります-

[ 0, 2, 4, 6, 8 ] [ 9, 7, 5, 3, 1 ]
  • 最後のステップは、これらの配列を連結することです。その後、requiredarrayを取得します。コードに入れると、これはすべて次のようになります-

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
]

  1. JavaScriptで配列をセットに変換する方法は?

    以下は、JavaScriptで配列を設定に変換するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> body

  2. JavaScriptでIDごとにオブジェクトの配列をグループ化する方法は?

    以下は、JavaScriptでオブジェクトの配列をIDでグループ化するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>