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

JavaScript数组push对象时被覆盖问题求助

问题解决思路

核心错误分析

  • filter条件里的赋值操作
    你在filter(element => element.projectId = projectId)中用了赋值运算符=,而不是全等比较运算符===。每次调用这个方法时,会把数组里所有元素的projectId强制改成传入的projectId,赋值表达式返回的是修改后的值,所以filter会保留所有元素,取第一个就会得到被修改的元素,导致你误以为找到了匹配项,实际是把所有元素的id都改成了当前传入值,看起来数组被覆盖。

  • 初始数组的空对象干扰
    你初始化openCalculationFiles = [{}],这个空对象没有projectId,每次执行filter时都会被赋值当前传入的projectId,导致它一直被误判为匹配项,新对象根本不会被push进去,反而每次都在修改这个空对象的lastUpdate,看起来数组只有这一个元素在更新。

修正后的代码

const cron = require('node-cron');

// 初始化为空数组,移除干扰的空对象
let openCalculationFiles = [];

module.exports = {
    cronjobCalculationUsage: () => {
      cron.schedule('30,0 * * * * *', async() => {
        // 你的cron任务逻辑
      });
    },
    upsertOpenCalculation: (projectId) => {
      console.log(openCalculationFiles);
      // 用===做全等比较,改用find直接获取匹配元素(比filter取[0]更高效)
      const openCalculation = openCalculationFiles.find(element => element.projectId === projectId);

      if (openCalculation) {
        openCalculation.lastUpdate = new Date().getTime();
      } else {
        const newOpenCalculation = {
          projectId: projectId,
          lastUpdate: new Date().getTime()
        };
        openCalculationFiles.push(newOpenCalculation);
      }

      console.log(openCalculationFiles);
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:10:28