検索

ホームページ  >  に質問  >  本文

JavaScriptで配列をランダムソート(シャッフル)する方法をマスターする

<p>次のような配列があります:</p> <pre class="brush:php;toolbar:false;">var arr1 = ["a", "b", "c", "d"];</pre> <p>ランダム化/シャッフルするにはどうすればよいですか? </p>
P粉877719694P粉877719694505日前565

全員に返信(2)返信します

  • P粉320361201

    P粉3203612012023-08-23 12:27:59

    これは、Fisher-Yates の最適化されたバージョンである Durstenfeld shuffle の JavaScript 実装です:

    リーリー

    これは、トランプのデッキからランダムに選択するのと同じように、元の配列要素ごとにランダムな要素を選択し、次の描画から除外します。

    この賢い削除方法は、選択された要素を現在の要素と交換し、残りの要素から次のランダムな要素を選択し、最適な効率で逆方向にループし、ランダムな選択が確実に単純化されるようにします (常に 0 から開始できます)。したがって、最後の要素がスキップされます。

    アルゴリズムの実行時間は O(n) です。このシャッフルはその場で実行されるため、元の配列を変更したくない場合は、最初に .slice(0) メソッドを使用してコピーを作成してください。 。


    編集: ES6/ECMAScript 2015 に更新されました

    新しい ES6 では、2 つの変数を同時に割り当てることができます。これは、1 行のコードで実行できるため、2 つの変数の値を交換する場合に特に便利です。これは、この機能を使用する同じ関数の短縮形です。

    リーリー

    返事
    0
  • P粉928591383

    P粉9285913832023-08-23 11:04:38

    実際、不偏シャッフル アルゴリズムは Fisher-Yates (Knuth としても知られる) シャッフル アルゴリズム です。

    ここで素晴らしいビジュアライゼーションをご覧いただけます (元の投稿 ここにリンクされています )

    リーリー

    返事
    0
  • キャンセル返事