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

JavaScript用数组统计选项选中次数时二次运行数组重置问题

投票累计计数重置问题解决

问题根因

每次运行代码计数归零是必然结果,核心原因如下:

  • 代码首行写死了let arr = [0,0,0,0],每次启动都会重新初始化全0数组。代码单次运行结束后,当前上下文的内存数据会被系统回收,没有持久化存储的前提下,上一次运行的计数数据不可能留存。
  • 原有逻辑存在三处冗余/缺陷:prompt返回值为字符串类型,和数字索引做非严格相等比较虽然能跑通,但存在类型转换隐患;没有输入合法性校验,用户输入0-3范围外的内容时没有任何提示拦截;遍历全数组匹配索引的写法完全多余,直接用选项值作为数组下标访问即可。

修复方案

浏览器环境下用localStorage做计数持久化:代码启动时优先读取本地存储的历史计数,无历史数据时才初始化全0数组;用户投票更新计数后,立刻把最新计数同步写入本地存储,下次启动即可读取到累计值,同时补全输入校验逻辑。

修复后完整代码:

// 优先读取本地存储的历史计数,无历史数据才初始化全0数组
let arr = JSON.parse(localStorage.getItem('pollCount')) || [0, 0, 0, 0]

const poll = {
    registerNewAnswer: function () {
        const input = prompt(`
            Which is your favourite Movie?
            0: Toy Story
            1: Star Wars
            2: Fast & Furious
            3: Final Destination
            (Write option number)
        `);
        // 校验输入合法性
        const option = Number(input);
        if (isNaN(option) || option < 0 || option > 3) {
            alert('请输入0-3范围内的有效选项编号');
            return null;
        }
        return option;
    }
}

const userChoice = poll.registerNewAnswer();
if (userChoice !== null) {
    arr[userChoice] += 1;
    // 最新计数同步写入本地存储
    localStorage.setItem('pollCount', JSON.stringify(arr));
    console.log('当前累计投票结果:');
    console.log(...arr);
}

如果是Node.js环境运行,把localStorage读写逻辑替换为本地文件读写即可,核心逻辑一致:不要每次启动都硬编码重置计数数组,把计数数据存在代码运行上下文之外的持久化介质中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:06:35