Maison > interface Web > js tutoriel > Comment puis-je mélanger efficacement un tableau en JavaScript à l'aide de l'algorithme Fisher-Yates ?

Comment puis-je mélanger efficacement un tableau en JavaScript à l'aide de l'algorithme Fisher-Yates ?

DDD
Libérer: 2024-12-27 21:24:17
original
374 Les gens l'ont consulté

How Can I Efficiently Shuffle an Array in JavaScript Using the Fisher-Yates Algorithm?

Réarrangement efficace des tableaux à l'aide de l'algorithme de Fisher-Yates

En JavaScript, le brassage des tableaux est une opération courante souvent utilisée dans la randomisation ou le développement de jeux. Pour mélanger efficacement un tableau, l'algorithme populaire de Fisher-Yates fournit une approche efficace.

Implémentation de l'algorithme Fisher-Yates

Le principe de base de cet algorithme consiste à échanger à plusieurs reprises des éléments du tableau avec des éléments sélectionnés au hasard. éléments. Ce processus se poursuit jusqu'à ce que tous les éléments aient été échangés. Le code suivant implémente cet algorithme :

/**
 * Shuffles an array in place.
 * @param {Array} a Array containing the elements to be shuffled.
 */
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;
}
Copier après la connexion

Version ES6

Dans ES6, le code peut être simplifié à l'aide de l'affectation de déstructuration :

/**
 * Shuffles an array in place. ES6 version.
 * @param {Array} a Array containing the elements to be shuffled.
 */
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;
}
Copier après la connexion

Implémentation du prototype de tableau

Pour améliorer la lisibilité du code, vous pouvez ajouter la fonctionnalité de lecture aléatoire en tant que méthode prototype pour 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;
    }
});
Copier après la connexion

Cela vous permet d'appeler simplement arr.shuffle() pour mélanger un tableau nommé arr.

Exemple d'utilisation

Pour utiliser la fonction shuffle, vous peut fournir un tableau d'éléments en entrée, tels que :

let myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
shuffle(myArray);
Copier après la connexion

La fonction shuffle réorganisera de manière aléatoire les éléments dans myArray. Cette fonction peut être particulièrement utile dans les scénarios où vous avez besoin de données aléatoires ou de mélange de cartes dans un jeu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal