首页 > 解决方案 > js 数组推送结果仅返回迭代长度 [moment js & angular]

问题描述

我有一个函数可以在一个月内迭代几天。从那里我用 ngFor 在我的 html 中显示它们。我想将日期数字显示为文本,将日期名称(星期一、星期二、星期三等)显示为每天的课程。

monthDays = []; // global variable

  getDaysInMonth(month, year) {
    var date = new Date(year, month);
    var days = []; // 1,2,3
    var daysName = []; // mon, tue, wed
    while (date.getMonth() === month) {
      this.monthDays.push({
        days: days.push(moment(date).format("D")),
        daysName: daysName.push(moment(date).format("M"))
      })
      date.setDate(date.getDate() + 1);
    }
    console.log(this.monthDays);
  }

因为我需要两个属性(days 和 daysName),所以我将它们推送到 monthDays 全局变量数组中,但结果只是月份的数字

Array(31) // I.e Jan getDaysInMonth(1,2019)
0: {days: 1, daysName: 1} // should be days: 1 , daysName: 'Tue'
1: {days: 2, daysName: 2} // should be days: 2 , daysName: 'Wed'

所以我可以在我的html中使用这样的对象

<p *ngFor="let x of monthDays" class="{{x.daysName}}" >{{ x.days }}</p>

任何帮助或推动正确的方向都会很棒。

标签: javascriptarraysangularmomentjs

解决方案


因为push返回数组Array push的新长度,days并且daysName是数组的长度。我认为您想要获取具有 2 个属性的数组对象是 day 和 dayname。试试看:

monthDays = []; // global variable

getDaysInMonth(month, year) {
    var date = new Date(year, month);
    var days = []; // 1,2,3
    var daysName = []; // mon, tue, wed
    while (date.getMonth() === month) {
        this.monthDays.push({
            days: moment(date).format("D"),
            daysName: moment(date).format("dddd")
        })
        date.setDate(date.getDate() + 1);
    }
    console.log(this.monthDays);
}

推荐阅读