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

如何匹配数组目标项并增加对应voteCount值(电影投票场景)

实现方案

直接操作JSON文件的代码实现

首先修正你原代码的笔误:你调用movieListArr.map()生成的投票数组没有赋值给labelArr,直接写入JSON会报错,需要先把map结果赋值给写入用的变量。
以下是核心投票计数实现代码:

const fs = require('fs/promises'); // 用promise版本的fs更方便控制异步流程,也可以替换为同步版本

async function updateVoteCount(userVote) {
  try {
    // 1. 读取并解析本地JSON文件
    const movieJsonContent = await fs.readFile('./movie.json', 'utf8');
    const movieList = JSON.parse(movieJsonContent);

    // 2. 匹配用户投票的选项,更新计数
    const targetMovie = movieList.find(item => item.value === userVote);
    if (!targetMovie) {
      console.log(`投票项${userVote}不存在`);
      return;
    }
    targetMovie.voteCount += 1;

    // 3. 把更新后的数据写回JSON文件
    await fs.writeFile('./movie.json', JSON.stringify(movieList, null, 2));
    console.log('投票计数更新成功');
  } catch (err) {
    console.error('投票处理失败:', err);
  }
}

// 调用示例
const userVote = interaction.values[0];
updateVoteCount(userVote);

如果你需要同步处理逻辑,也可以使用同步读写版本:

const fs = require('fs');
const userVote = interaction.values[0];
try {
  const movieList = JSON.parse(fs.readFileSync('./movie.json', 'utf8'));
  const target = movieList.find(item => item.value === userVote);
  target && (target.voteCount += 1);
  fs.writeFileSync('./movie.json', JSON.stringify(movieList, null, 2));
} catch (err) {
  console.error(err);
}

更优存储方案推荐

直接用JSON文件存储只适合极低并发、数据量极小的测试场景,实际使用会存在并发写入损坏文件、全量读写性能差、无事务保障容易丢数据的问题,推荐根据业务场景选择替代方案:

  • 小型单服务项目:选择SQLite,文件型轻量数据库,不需要单独运行服务进程,支持SQL查询和事务,写入安全,性能远高于JSON文件。
  • 中高频投票场景:选择Redis,内存型数据库,读写速度极快,原生支持计数原子操作,不用担心并发冲突问题,也可以配置持久化防止数据丢失。
  • 后续需要扩展投票用户校验、多场次投票等复杂功能:选择MySQL、MongoDB这类通用数据库,可以灵活支持各类业务扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:02