You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改JS随机选数组元素代码以避免重复输出?

实现无重复随机跳转直至数组耗尽的方案

嘿,这个需求很容易解决!核心思路是维护一个剩余未跳转的链接数组,每次选中后就把该元素从剩余数组中移除,直到剩余数组为空时再重置回原数组。这样就能保证每次点击都是全新的站点,不会重复,直到所有链接都用完才会重新循环。

下面是修改后的完整代码:

<script>
// 原链接数组
var links = [
    "page-1",
    "page-2",
    "page-3",
    // ...
    "page-108",
];
// 维护剩余未跳转的链接数组,初始化时复制原数组
var remainingLinks = [...links];

function openSite() {
    // 如果剩余数组为空,重置回原数组的副本
    if (remainingLinks.length === 0) {
        remainingLinks = [...links];
        console.log("所有链接已遍历完毕,重新开始循环");
    }

    // 从剩余数组中随机选取索引
    var randIdx = Math.floor(Math.random() * remainingLinks.length);
    // 取出选中的链接
    var selectedPage = remainingLinks[randIdx];
    // 从剩余数组中移除已选中的元素
    remainingLinks.splice(randIdx, 1);

    // 构造完整链接并跳转
    var link = 'https://websitename.com/page/' + selectedPage;
    window.location.assign(link);
};
</script>

关键改动解释:

  • 新增remainingLinks变量:用来存储还没被跳转的链接,初始时用扩展运算符[...links]复制原数组(避免直接修改原数组)。
  • 空数组检查:每次点击时先判断剩余数组是否为空,如果为空就重置为原数组的副本,实现循环复用。
  • 删除已选元素:用splice(randIdx, 1)从剩余数组中移除刚选中的链接,确保下次不会再选到它。
  • 优化随机索引生成:把原来的parseInt(Math.random() * length)改成更简洁的Math.floor(Math.random() * length),效果一致但可读性更好。

这样修改后,每次点击按钮都会跳转到之前没去过的站点,直到108个页面都遍历完,才会重新开始新一轮的无重复随机跳转~

内容的提问来源于stack exchange,提问作者Meghan K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:17:51