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

遍历日期数组给depDate赋值后仅输出最后一个值的问题排查

问题:遍历日期数组时仅输出最后一个日期

你生成日期数组的逻辑没问题,但writeBody函数里的循环写法导致了只输出最后一个日期,问题出在这两点:

  • 循环代码块范围错误:你的for循环没有用花括号{}包裹执行代码,默认只有紧随其后的那一行(depDate = dates[i].slice(0, 10);)属于循环体,而console.log([depDate]);在循环外面,只会在整个循环结束后执行一次,此时depDate已经被最后一次循环覆盖为数组的最后一个元素。
  • 全局变量重复覆盖:depDate是全局变量,每次循环都会用当前元素的值覆盖它,即使日志在循环里,也没必要用全局变量,改用局部变量更合理。

修正后的代码(方法一:修复for循环结构)

//run this to generate the dates
let dates = [];

function createDates() {
  const listLength = 10; // days
  for (let i = 0; i < listLength; i++) {
    let itemDate = new Date(); // starting today
    itemDate.setDate(itemDate.getDate() + i);
    dates.push(itemDate.toISOString());
  }
  return dates;
}

createDates();

const writeBody = () => {
  for (let i = 0; i < dates.length; i++) {
    // 用局部变量存储当前日期,避免全局覆盖
    const depDate = dates[i].slice(0, 10);
    console.log(depDate);
  }
}

writeBody();

更简洁的写法(方法二:使用forEach遍历)

如果不需要索引,用数组的forEach方法更直观:

const writeBody = () => {
  dates.forEach(date => {
    const depDate = date.slice(0, 10);
    console.log(depDate);
  });
}

这样修改后,每次循环都会输出当前迭代的日期,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:36:21