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

JS中setTimeout无法递减数组内对象mzone属性值问题求助

问题原因
  • 核心问题:setTimeout(function(){ (clubsList[playerCountry].mzone - 1 ) }, 5000);这段代码仅计算了mzone - 1的结果,没有将结果赋值回mzone属性,计算得到的临时值没有被保存,因此原属性不会发生变化。
  • 潜在问题:你使用数组clubsList存储以playerCountry(字符串类型)为键的对象,属于数组类型误用,JS数组的原生方法仅对数字索引生效,此处改用普通对象更符合使用场景。
修复代码
// 把clubsList从数组改为普通对象更合理
const clubsList = {}

onNet('verifyMeetingZone', (playerCountry) => {
    if (!clubsList[playerCountry]) {
        clubsList[playerCountry] = {
            mzone: 0
        }
    }
    if (clubsList[playerCountry].mzone <= 2) {
        console.log("Mzone Criado")  
        clubsList[playerCountry].mzone += 1; 
        console.log(clubsList[playerCountry].mzone)
        // 修改点:将减法结果赋值回原属性,新增边界判断避免减到负数
        setTimeout(function(){ 
            if(clubsList[playerCountry]?.mzone > 0) {
                clubsList[playerCountry].mzone -= 1 
            }
        }, 5000);
        setTimeout(function(){ 
            console.log(clubsList[playerCountry].mzone) 
        }, 6000);
    }
    else {
        console.log("Ja existe")  
    }
})
补充说明

如果业务场景中存在5秒内多次触发verifyMeetingZone事件的情况,每个触发都会新增一个独立的定时器,各自在5秒后执行减1操作,完全符合你「本次新增的1会在5秒后自动扣减」的需求,无需额外处理。如果你的实际需求是最后一次触发后统一5秒再扣减,可额外存储定时器ID,每次触发前先清理上一次的定时器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:15:05