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

JavaScript初学者求助:解释数组随机打乱代码的运行逻辑

代码运行逻辑讲解

这段是经典的Fisher-Yates 洗牌算法,作用是公平随机打乱数组的元素顺序,核心逻辑分三部分:

1. 初始定义

首先声明了一个常量数组points,初始值为[40, 100, 1, 5, 25, 10],数组长度为6,元素索引范围是0~5。

2. 倒序遍历交换

外层是倒序执行的for循环:

  • 循环变量i初始值为points.length - 1也就是5,对应数组最后一个元素的索引,循环执行条件为i > 0,每次循环结束后i递减1
  • 循环内部第一行let j = Math.floor(Math.random() * i):生成一个取值范围在[0, i-1]的随机整数,作为本次交换的随机索引
  • 后续三行是标准的变量交换逻辑:用临时变量k暂存当前索引i的元素值,再把随机索引j的元素赋值给points[i],最后把临时变量k里存的原i位置元素赋值给points[j],完成两个位置元素的互换

3. 结果输出

循环执行完毕后,console.log(points)会打印出完全打乱后的数组内容。

补充说明

这个算法的核心优势:

  • 时间复杂度为O(n),仅需要遍历数组一次
  • 空间复杂度为O(1),不需要额外开辟空间存储新数组
  • 倒序遍历+从前i个元素取随机索引的设计,能保证每个元素出现在任意位置的概率完全相等,不会出现洗牌偏倚的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:45:03