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

Vue中如何将当前周数据存入数组指定字段并循环展示

问题:使用moment.js生成周数据时数组结构错误导致页面无法正常渲染

你的代码核心问题出在getCurrentWeek方法的循环逻辑:每次循环会向数组推入三个独立对象(分别只包含textDay、numberDay、month单个字段),最终days数组会生成21个元素(7天×3个对象),而非预期的7个包含完整字段的对象,这直接导致v-for遍历时每个元素仅能提供单个字段值,无法渲染完整日期信息。

修正后的代码

HTML部分(无需修改)

<div v-for="(day, index) in days" :key="index">
  <p>{{ day.month }}</p>
  <p>{{ day.numberDay }}</p>
  <p>{{ day.textDay }}</p>
</div>

JS部分

data() {
  return {
    days: []
  }
},
methods: {
  getCurrentWeek() {
    const currentDate = moment();
    const weekStart = currentDate.clone().startOf('isoWeek');
    const days = [];

    for (let i = 0; i <= 6; i++) {
      // 提前计算当前循环的日期,避免重复调用moment方法
      const currentDay = weekStart.clone().add(i, 'days');
      // 将三个字段合并为一个对象后推入数组
      days.push({
        textDay: currentDay.format("dddd"),
        numberDay: currentDay.format("Do"),
        month: currentDay.format("MMMM")
      });
    }

    this.days = days;
  }
}

关键修正说明

  1. 合并字段到单个对象:每次循环创建包含textDay、numberDay、month三个字段的完整对象,确保数组每个元素都是结构统一的日期对象。
  2. 优化moment性能:提前克隆并计算当前循环的日期(currentDay),避免重复执行moment(weekStart).add(i, 'days')这类冗余操作。
  3. v-for的key优化:可以用循环的index作为key,也可以用currentDay.format('YYYYMMDD')生成唯一日期字符串作为key,后者在数据更新时的渲染效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:45:30