J'ai une chaîne séparée par des virgules, dont j'ai besoin de créer une nouvelle chaîne qui contient un ordre aléatoire des éléments de la chaîne d'origine, tout en s'assurant qu'il n'y a pas de récurrence. Par exemple: En cours d'exécution 1,2,3,1,3 donnera 2,3,1 et un autre temps 3,1,2, et ainsi de suite.Comment construire efficacement une liste aléatoire à partir d'une liste donnée sans récurrences dans JS?
J'ai un code qui sélectionne un élément aléatoire dans la chaîne d'origine, puis itère sur la nouvelle chaîne pour voir si elle n'existe pas déjà. Si ce n'est pas le cas, l'élément est inséré. Cependant, j'ai le sentiment que cela peut être amélioré (en C#, j'aurais utilisé une hashtable, au lieu d'itérer à chaque fois sur le nouveau tableau). Une amélioration peut être de supprimer l'élément que nous avons inséré du tableau original, afin d'éviter les cas où le nombre aléatoire nous donnera le même résultat, par exemple.
Je serais heureux si vous pouviez suggérer des améliorations au code ci-dessous.
originalArray = originalList.split(',');
for (var j = 0; j < originalArray.length; j++) {
var iPlaceInOriginalArray = Math.round(Math.random() * (originalArray.length - 1));
var bAlreadyExists = false;
for (var i = 0; i < newArray.length; i++) {
if (newArray[i].toString() == originalArray[iPlaceInOriginalArray].toString()) {
bAlreadyExists = true;
break;
}
}
if (!bAlreadyExists)
newArray.push(originalArray[iPlaceInOriginalArray]);
}
Merci!
Merci beaucoup, je n'ai pas remarqué. – Nir