从指定数组随机推送字符至另一数组功能异常求助
问题修复方案
核心问题分析
- 循环条件完全错误:
for(var c = 0; c > 30; c++)里初始值c=0,0>30不成立,循环根本没执行,自然不会生成任何随机字符。 - 索引越界风险:
Math.round(Math.random() * legalCharactersForSaveCode.length)可能得到等于数组长度的数值,导致取到undefined——数组合法索引范围是0到length-1。 - 变量未声明:
v没加var/let/const声明,会变成全局变量,存在意外覆盖的隐患。
修复后的代码
var legalCharactersForSaveCode = ["B","C","D","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "+", "/"]; var saveCode = []; function generateSaveCode() { // 重置数组,避免多次调用时累加旧数据 saveCode = []; for(var c = 0; c < 30; c++){ // 用Math.floor确保索引始终在合法范围内 var v = Math.floor(Math.random() * legalCharactersForSaveCode.length); saveCode.push(legalCharactersForSaveCode[v]); } saveCode.push(store.get("money")); alert(saveCode); }
额外优化说明
- 移除了数组末尾多余的逗号,避免旧版JS环境解析报错。
- 每次调用函数时重置
saveCode,防止多次调用后数组保留之前的生成结果。
内容的提问来源于stack exchange,提问作者Coolcoder789
相关产品推荐
相关产品推荐

