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

JSON.parse处理日期可用性查询数据时monthlyresults丢失如何修复

日期可用性校验返回数据异常修复方案

根因定位

  1. 并非JSON.parse导致数据丢失:srStr是值类型字符串,打印时输出的是执行时刻的快照;而浏览器控制台打印对象时保存的是引用,你看到的sr的monthlyresults为空,是后续filter操作修改了该字段后,控制台展开对象时读取了修改后的值,并非解析阶段丢失。
  2. filter返回空数组的核心原因:
    • 仅校验了月份匹配,未校验年份:getMonth()返回0-11的月份序号,不同年份的相同月份会被误过滤
    • moment解析result.date格式不匹配,导致日期解析结果错误,月份判断不成立

修复代码

searchFakeMonthlyAvailability(query: FormData): Promise<Results> {
    return new Promise<Results>((resolve, reject) => {
        setTimeout(() => {
            let srStr: string = JSON.stringify(searchMonthlyResults);
            let sr: Results = JSON.parse(srStr);
            console.log('srStr: ', srStr);
            // 打印解析后真实值,避免控制台引用干扰
            console.log('parse后sr快照:', JSON.stringify(sr));
            
            // 提前计算目标年月,避免重复执行逻辑
            const targetDate = moment(query.startDate).toDate();
            const targetMonth = targetDate.getMonth();
            const targetYear = targetDate.getFullYear();
            
            // 修正过滤逻辑:同时匹配年份+月份,若日期格式特殊可给moment传第二参数指定格式,如moment(result.date, 'YYYY/MM/DD')
            sr.monthlyresults = sr.monthlyresults.filter(result => {
                const resDate = moment(result.date).toDate();
                return resDate.getMonth() === targetMonth && resDate.getFullYear() === targetYear;
            });

            resolve(sr);
        }, 1500);
    });
}

额外排查建议

  • 若调整后仍返回空数组,可在filter逻辑中打印每个result.date的解析结果,确认是否存在日期格式解析异常
  • 后续打印对象时可统一用JSON.stringify转成字符串输出,拿到执行时刻的真实快照,避免控制台引用机制导致的判断偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:27:02