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

React Native自定义Array.shuffle方法实现无重复随机数组求助

数组shuffle方法实现问题修复

原代码存在的问题

  • 仅生成了范围为原数组长度的随机索引值,没有对应提取原数组的元素,输出结果不是原数组的内容
  • 没有做重复值校验,生成的随机索引大概率会出现重复,不符合无重复的要求

正确实现(Fisher-Yates 洗牌算法,业界通用无偏洗牌方案)

export default function App() {
  Array.prototype.shuffle = function () {
    // 拷贝原数组避免修改原数组,减少副作用
    const arr = [...this]
    for (let i = arr.length - 1; i > 0; i--) {
      // 生成0到i区间的随机索引
      const randomIdx = Math.floor(Math.random() * (i + 1));
      // 交换当前位置元素和随机索引位置的元素
      [arr[i], arr[randomIdx]] = [arr[randomIdx], arr[i]]
    }
    console.log(arr)
    // 返回打乱后的数组供外部逻辑使用
    return arr
  }
  let random = [0,1,2,3,4].shuffle()
}

实现说明

注意:直接在Array.prototype上扩展方法属于污染全局原型链,非特殊场景不推荐这种写法,可以封装为独立工具函数使用

  • 从数组末尾开始遍历,每次取当前位置之前的随机索引和当前位置元素交换,保证每个元素出现在任意位置的概率均等
  • 最终输出的数组包含原数组所有元素,无重复,且顺序完全随机

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:27:03