如何修复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
相关产品推荐
相关产品推荐

