防止随机操作在Javascript中两次返回相同的值

1 javascript random

我对编码非常陌生,并且正在开发我的第一个Javascript项目.我正在尝试创建一个随机选择一个设置的小型随机字符生成器,​​以及两个数组中的字符原型.我的问题是我一直在重复,可能是由于列表的规模很小.

<html>
<head>
<script type="text/javascript">

  var setting=new Array('Steampunk',
                        'Fuedal Japanese',
                        'Post Apocalyptic',
                        'Horror',
                        'Fantasy',
                        'Cyberpunk',
                        'Western',
                        'Pulp',
                        'Military',
                        'Space Opera',
                        'Medieval',
                        'Ancient',
                        'Mythological',
                        'Urban',
                        'Trans-Humanist',
                        'Renaissance',
                        'Dystopian',
                        'Retro Futuristic',
                        'Nordic',
                        'Colonial');  

  var Archetype=new Array('Ninja',
                          'Samurai',
                          'Viking',
                          'Cowboy',
                          'Rogue',
                          'Wizard',
                          'Wrestler / Luchador',
                          'Knight',
                          'Scientist',
                          'Gadgeteer',
                          'Druid',
                          'Performer',
                          'Pirate',
                          'Alien',
                          'Superhero / Villain',
                          'Robot',
                          'Soldier',
                          'Vampire',
                          'Werewolf',
                          'Bounty Hunter');

  function resetSettingAndArchetype()
  {
    var whichsetting = Math.floor(Math.random()*(setting.length));
    var whicharchetype = Math.floor(Math.random()*(Archetype.length));
Run Code Online (Sandbox Code Playgroud)

如何让随机操作永远不会返回相同的值两次?

nne*_*neo 5

您可以对阵列进行混洗(例如,使用Fisher-Yates shuffle),然后在混洗阵列上逐个迭代.当你到达一个结束时,只需再次洗牌.