chr*_*ude 1 javascript arrays random loops for-loop
我有一个阵列var words = []//lots of different words in it.我有一个Math.floor(Math.random()*words.length)从数组中选择一个随机字.这是在循环中运行的,该循环运行随机次数(2到200次).我想确保在该循环运行期间不会多次选择随机数.你会怎么建议这样做?
有多种方法可以做到这一点.
你可以随机播放整个系列,只需从一端抓取物品.这将确保您在一次完整迭代期间不会遇到任何一个项目(或者更确切地说,超过它在原始输入数组中出现的次数).
但是,这需要您就地修改原始集合,或者创建它的副本.
如果您只打算抓住一些物品,可能会有不同的方式.
您可以使用哈希表或其他类型的字典,只需检查原始集合中随机选择的项目是否已存在于字典中.如果没有,请将其添加到字典中并使用它.如果它已经存在于词典中,请再次选择.
此方法使用与您需要选择的项目数量成比例的存储.
另请注意,当您到达列表中的最后几个项目时,第二种方法在性能方面有点糟糕,因为您可能会冒险寻找仍然未经过多次迭代选择的项目,因此这只是如果您需要随机选择的项目远远少于集合中的项目数,那么这是一个可行的解决方案.