JS : Les permutations d'un tableau en javascript

Récement confronté à devoir comparer des ensembles dans des ordres différents de données identiques, j'ai été amené à faire des permutations de mes tableaux de données.

Je vous suggère les deux fonctions ci-dessous, elles sont récursives et bouclent automatiquement pour afficher tous les cas de figure.

La première : 

  • Fixe la chaine à la position de départ (first),
  • Trouve toutes les permutations circulaires à partir de cette chaine jusq’à la dernière
  • Et pour chaque permutation, chercher les anagrammes à partir de la chaine suivante grâce à la seconde fonction qui pourrait dirrectement être intégrée dans la première mais que l'on garde sortie pour faciliter la lisibilité et la compréhention du code.

La seconde :

  • Fixe la chaine à la position de départ (i),
  • Decale tous les elements d’un rang vers la gauche, a partir de la position i+1
  • Met le premier element à la dernière position
/**
 * @var Arr(array) tableau à permuter
 * @var first(int) premier index à prendre en compte
 * @return (string) affiche dans les logs le tableau permuté
 */
function anagramma(Arr, first)
{
	if ((Arr.length - first) <= 1)
	{
		console.log( Arr.join('-') );
	}
	else
	{
		for (var i = 0; i < Arr.length-first ; i++)
		{
			anagramma(anagramma_round(Arr, first), first+1);
		}
	}
}
/**
 * @var Arr(array) tableau à permuter
 * @var i(int) premier index à prendre en compte
 * @return (array) retourne le tableau après avoir permuté tous les élément de un niveau vers la gauche
 */
function anagramma_round(Arr, i){
	var temp = Arr[i];
	for(var j=i;j < Arr.length-1;j++)
	{
		Arr[j] = Arr[j+1];
	}
	Arr[Arr.length-1] = temp;
	return Arr;
}

// déclanche la fonction
anagramma([1, 2, 'a'], 0);

 Ce qui affiche dans la console :

2-1-a
2-a-1
a-2-1
a-1-2
1-a-2
1-2-a

Liens utiles :

 

Enjoy!!