js数组推送结果仅返回迭代长度[moment js&angular]

时间:2019-01-30 02:18:52

标签: javascript arrays angular momentjs

我有一个函数可以迭代一个月中的几天。从那里,我用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>

任何帮助或朝正确的方向前进都是很好的。

1 个答案:

答案 0 :(得分:2)

因为push返回数组Array push的新长度,所以daysdaysName是数组的长度。我认为您想要获取具有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);
}