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

如何实现每次执行函数时随机返回数组元素的排序结果?

实现随机输出0到40的数字列表

原代码按固定顺序输出0到40的数字,要实现每次执行都随机输出,核心思路是先生成完整的数字集合,再用公平的洗牌逻辑打乱顺序后输出。这里推荐使用Fisher-Yates洗牌算法,它能保证每个元素的排列概率均等,是业内常用的数组打乱方案。

具体实现代码:

// 生成包含0到40的完整数组
const numbers = Array.from({ length: 41 }, (_, index) => index);

// 用Fisher-Yates算法打乱数组
for (let i = numbers.length - 1; i > 0; i--) {
  const randomIndex = Math.floor(Math.random() * (i + 1));
  // 交换当前元素与随机位置元素
  [numbers[i], numbers[randomIndex]] = [numbers[randomIndex], numbers[i]];
}

// 遍历输出打乱后的数字
numbers.forEach(num => console.log(num));

代码说明:

  • Array.from({ length: 41 }, (_, index) => index):快速生成0到40的数组,length设为41是因为要包含0到40共41个数字。
  • Fisher-Yates洗牌算法:从数组末尾开始,每次随机选取一个靠前的位置交换元素,遍历完成后数组会被完全打乱,且所有排列的出现概率一致。
  • 最后通过forEach遍历数组,实现随机顺序的打印效果。

如果追求极简写法(小数据量下差异不明显),也可以用简化版:

const numbers = Array.from({ length: 41 }, (_, i) => i)
  .sort(() => Math.random() - 0.5);

numbers.forEach(num => console.log(num));

不过这种基于sort的方式在部分场景下概率不够均匀,数据量较大时更推荐使用Fisher-Yates算法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:23:14