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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:10:20