随机数组选择,无需在JavaScript中选择两次

前端之家收集整理的这篇文章主要介绍了随机数组选择,无需在JavaScript中选择两次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我试图从一个数组中选择一个随机条目,然后进行设置,以便在选择每个条目之前不会再次选择特定条目.
基本上,我不希望看到任何相同的条目,直到选择了数组中的所有条目.

所以,如果这是我的阵…

  1. keywords =
  2. [
  3. "ppc","games","advertise","Meta","home","gaming","welcome"
  4. ]
  5. var keyword = keywords[Math.floor(Math.random()*keywords.length)]
  6. document.write(keyword);

我不希望看到输出

  1. Meta,advertise,home,Meta,gaming,welcome,ppc,welcome

因为Meta在第二次被选中之后才被选中.
我想看到更像的东西:

  1. Meta,games,

因为在每个条目被随机选择之前没有多次选择任何条目.(第二个循环从第二个“广告”开始,以防你没有发现差异.

但是你可以从我上面发布的代码中看到,我不知道该怎么做.我已经看到了随机选择的条目实际上从数组中完全删除的示例,但这不是我想要做的.我只想要选择每个条目一次,然后重新启动进程.

有谁知道这个代码

解决方法

您可以使用Array.sort()函数对其进行随机排序.
  1. // random sort function
  2. function shuffle(a,b)
  3. {
  4. return Math.random() > 0.5 ? -1 : 1;
  5. }
  6.  
  7. var keywords = ["ppc","welcome"];
  8.  
  9. var randomKeywords = keywords.sort(shuffle); // new instance of a sorted randomly copy of the array
  10.  
  11. alert(randomKeywords);

更新:

一个更好的改组解决方案是使用Fisher-Yates Shuffle,如answer所示.

  1. function shuffle(array)
  2. {
  3. var m = array.length,t,i;
  4. while (m > 0)
  5. {
  6. i = Math.floor(Math.random() * m--);
  7. t = array[m];
  8. array[m] = array[i];
  9. array[i] = t;
  10. }
  11. return array;
  12. }
  13.  
  14. var keywords = ["ppc","welcome"];
  15.  
  16. shuffle(keywords); // shuffles the array
  17.  
  18. alert(keywords);

猜你在找的JavaScript相关文章