p5.js中localStorage更新的array2无法用于随机数生成求助
问题解决:p5.js中随机数生成未基于更新后的localStorage数组
问题根源
你的代码执行顺序完全搞反了:先基于空的array2生成了随机数,之后才从localStorage读取真正的array2数据,这就导致每次生成的随机数都只考虑初始空数组,而非存储里的历史数据。
修正后的代码
function preload(){ let array1 = []; let array2 = []; // 第一步:先从localStorage读取array2的历史数据 if (localStorage.getItem('array2')) { array2 = JSON.parse(localStorage.getItem('array2')); } // 初始化array1为1-10 for (let i = 1; i <= 10; i++) { array1.push(i); } // 第二步:基于读取后的array2计算非交集数字 let NIM = array1.filter(num => !array2.includes(num)); // 处理边界:如果所有数字都已选过,NIM为空,这里做个兜底 if(NIM.length === 0){ print("所有数字已选完"); img = loadImage("https://ipfs.filebase.io/ipfs/" + monArray[1]); // 可选默认图 return; } // 第三步:从非交集数组中生成随机数 let randomIndex = floor(random(NIM.length)); let randeg = NIM[randomIndex]; img = loadImage("https://ipfs.filebase.io/ipfs/" + monArray[randeg]); // 第四步:更新array2并存回localStorage array2.push(randeg); localStorage.setItem('array2', JSON.stringify(array2)); print(NIM); print(array2); }
关键调整点
- 顺序重构:把读取localStorage的逻辑移到最前面,确保计算非交集数组时用的是最新的array2数据
- 边界处理:增加NIM为空的判断,避免
random(NIM.length)出现0长度导致的错误 - 逻辑对齐:确保随机数生成、数组更新、存储的流程是连贯的,每一步都基于上一步的正确数据
验证逻辑
现在每次刷新页面时,代码会先读取之前存在localStorage里的array2,再从剩下的未选数字里随机挑选,选完后更新存储,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Sefa Topçu
相关产品推荐
相关产品推荐

