Maison >interface Web >js tutoriel >Comment puis-je mélanger efficacement un tableau en JavaScript ?

Comment puis-je mélanger efficacement un tableau en JavaScript ?

DDD
DDDoriginal
2024-12-19 02:56:09606parcourir

How Can I Efficiently Shuffle an Array in JavaScript?

Mélange de tableaux avec JavaScript

L'algorithme de lecture aléatoire de Fisher-Yates offre une méthode efficace pour mélanger des tableaux en JavaScript. En échangeant aléatoirement des éléments, il garantit que chaque ordre possible a une chance égale de se produire.

Implémentation de l'algorithme

L'algorithme de lecture aléatoire de Fisher-Yates peut être implémenté comme suit :

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;
}

Cet algorithme parcourt le tableau dans l'ordre inverse, en échangeant chaque élément avec un élément aléatoire devant lui dans le tableau. Le tableau résultant est mélangé en raison de la nature aléatoire des échanges.

Utilisation

La fonction shuffle peut être utilisée pour mélanger un tableau en utilisant la syntaxe suivante :

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

Version ES6

L'algorithme de Fisher-Yates a été optimisé dans 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;
}

Prototype d'implémentation

Cet algorithme peut être implémenté en tant que méthode de prototype de tableau pour faciliter le brassage direct des tableaux :

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;
    }
});

Cette implémentation permet de mélanger les tableaux en utilisant la syntaxe arr.shuffle().

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!

Déclaration:
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
Article précédent:File d'attente d'impressionArticle suivant:File d'attente d'impression