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

如何修复JavaScript中从随机选中数组取随机值的错误?

问题修复方案

问题根源

你当前的代码中,winningArray拿到的是数组名称的字符串(比如"sixMatched"),而非实际的数组变量。因此当你用winningArray[下标]时,实际是在取字符串的某个字符,而非数组元素。

推荐修复方法:用对象统一管理数组

最规范的做法是把所有匹配数组放到一个对象中,通过字符串键名直接获取对应的数组引用:

步骤1:重构数据结构

把四个数组包裹到一个对象里,替代原来的独立变量:

// 用对象统一管理所有匹配数组
var matchArrays = {
  sixMatched: ["367687"],
  fiveMatched: ["567687","337687","167687","367587","368687"],
  fourMatched: ["387087","357187","365627","367620","369627","867987","367610","367604","394687","397681","367247","167683","767697","567617","367207"],
  threeMatched: ["338680","965647","163637","333677","837637","267427","364288","357634","767817","361557","302682","667027","320637","547686","967088","382637","360167","327286","817187","707087","387481","357280","563287","367803","867646","277686","384697","364483","467827","332681"]
};

// 保留原有的数组名称列表
var selectedArray = ["sixMatched","fiveMatched","fourMatched","threeMatched"];

步骤2:修改点击事件代码

通过对象的键名获取实际数组,再从中随机选取元素:

$('#play').click(function(){
    // 随机选取数组名称字符串
    var winningArrayName = selectedArray[Math.floor(Math.random()*selectedArray.length)];
    // 通过对象键名获取对应的数组
    var winningArray = matchArrays[winningArrayName];
    // 从数组中随机选取数字
    var winningNumber = winningArray[Math.floor(Math.random()*winningArray.length)];
    
    // 注意:animateNumber需要数字类型,所以把字符串转成整数
    $('#number').animateNumber({ number: parseInt(winningNumber) });
    console.log("Winning array is "+ winningArrayName +"");
    console.log("Winning number is "+ winningNumber +"");
    return false;   
});

替代方案(不推荐):直接访问全局变量

如果不想重构数据结构,也可以通过window对象访问全局变量(你原来的数组都是全局变量),但这种方法容易引发变量冲突,不利于代码维护:

$('#play').click(function(){
    var winningArrayName = selectedArray[Math.floor(Math.random()*selectedArray.length)];
    // 从window对象中获取对应的数组
    var winningArray = window[winningArrayName];
    var winningNumber = winningArray[Math.floor(Math.random()*winningArray.length)];
    
    $('#number').animateNumber({ number: parseInt(winningNumber) });
    console.log("Winning array is "+ winningArrayName +"");
    console.log("Winning number is "+ winningNumber +"");
    return false;   
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:50