ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で配列を効率的にシャッフルするにはどうすればよいですか?

JavaScript で配列を効率的にシャッフルするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-19 02:56:09604ブラウズ

How Can I Efficiently Shuffle an Array in JavaScript?

JavaScript を使用した配列のシャッフル

Fisher-Yates シャッフル アルゴリズムは、JavaScript で配列をシャッフルする効果的な方法を提供します。要素をランダムに交換することで、考えられる各順序付けが同じ確率で発生することが保証されます。

アルゴリズムの実装

フィッシャー・イェーツのシャッフル アルゴリズムは次のように実装できます。

function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = a[i];
        a[i] = a[j];
        a[j] = x;
    }
    return a;
}

このアルゴリズムは配列を逆順に反復処理します。各要素を配列内でその前にあるランダムな要素と交換します。結果の配列は、スワップのランダムな性質によりシャッフルされます。

使用法

シャッフル関数は、次の構文を使用して配列をシャッフルするために使用できます。

var myArray = ['1','2','3','4','5','6','7','8','9'];
shuffle(myArray);

ES6バージョン

Fisher-Yates アルゴリズムは ES6 で最適化されています:

function shuffle(a) {
    for (let i = a.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [a[i], a[j]] = [a[j], a[i]];
    }
    return a;
}

実装プロトタイプ

このアルゴリズムは次のように実装できます。直接シャッフルを容易にする配列プロトタイプメソッドarrays:

Object.defineProperty(Array.prototype, 'shuffle', {
    value: function() {
        for (let i = this.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [this[i], this[j]] = [this[j], this[i]];
        }
        return this;
    }
});

この実装では、arr.shuffle() 構文を使用して配列をシャッフルできます。

以上がJavaScript で配列を効率的にシャッフルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:印刷キュー次の記事:印刷キュー